【问题标题】:How to check if a variable is loaded in JavaScript?如何检查是否在 JavaScript 中加载了变量?
【发布时间】:2010-09-10 21:16:10
【问题描述】:

如何查看某个对象是否已加载,如果没有,如何加载,如下所示?

if (!isObjectLoaded(someVar)) {
    someVar= loadObject();
}

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    如果它是一个对象,那么您应该能够检查它是null 还是undefined,如果是则加载它。

    if (myObject === null || myObject === undefined) {
       myObject = loadObject();
    }
    

    使用typeof 函数也是一个选项,因为它返回所提供对象的类型。但是,如果对象尚未加载,它将返回 null or undefined,因此在可读性方面可能会归结为个人喜好。

    【讨论】:

    • 像 if (myObject == null) (or undefined) 这样的测试还不够吗,因为这正是简单相等的重点?还是我错过了什么?
    • @PhiLho - 根据对象类型,对象可能为空,也可能未定义。 JavaScript 将它们视为两种不同的东西。
    • @Rob @PhiLho This:x == null 等价于:x === null || x === undefined(在全局变量undefined没有被修改的情况下)。因此,您可以只写myObject == null,而不是您的表达。它不仅更小,而且更健壮,因为它对变量 undefined 的赋值无关紧要。
    【解决方案2】:
    if(typeof(o) != 'object') o = loadObject();
    

    【讨论】:

    • 请记住 typeof 为空值返回“object”,因此您可能需要类似 [if(null !== x && 'object' == typeof(x)){]
    【解决方案3】:
    myObject = myObject || loadObject();
    

    【讨论】:

      【解决方案4】:

      我不确定您所说的“已加载”是什么意思...变量object 是否存在并且根本没有您想要的类型?在这种情况下,你会想要这样的东西:

      function isObjectType(obj, type) {
          return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor);
      }
      

      然后使用if (isObjectType(object, MyType)) { object = loadObject(); }

      如果 object 在您的测试之前没有填充任何内容(即 - typeof object === 'undefined'),那么您只需要:

      if ('undefined' === typeof object) { object = loadObject(); }
      

      【讨论】:

        【解决方案5】:

        您可能想查看给定对象是否已定义

        特别是如果它在一个异步线程中完成,并设置了一个 setTimeout 来检查它何时出现。

          var generate = function()
          { 
              window.foo = {}; 
          }; 
          var i = 0;
          var detect = function()
          {
             if( typeof window.foo == "undefined" ) 
             {
                   alert( "Created!"); 
                   clearInterval( i );
             }
           };
           setTimeout( generate, 15000 ); 
           i = setInterval( detect, 100 ); 
        

        理论上应该检测 window.foo 何时存在。

        【讨论】:

          【解决方案6】:

          如果加载的意思是已定义,则可以使用 typeof 函数检查变量的类型。 HOWEVER typeof 有一些怪癖,会将 Object、Array 和 null 识别为对象

          alert(typeof(null));
          

          将 null 标识为已定义对象可能会导致程序失败,因此请检查类似

          if(null !== x && 'object' == typeof(x)){
              alert("Hey, It's an object or an array; good enough!");
          }
          

          【讨论】:

            【解决方案7】:

            您也可以只使用快捷方式if(obj)

            【讨论】:

              【解决方案8】:

              如果要检测自定义对象:

              // craete a custom object
              function MyObject(){
              
              }
              
              // check if it's the right kind of object
              if(!(object instanceof MyObject)){
                 object = new MyObject();
              }
              

              【讨论】:

                【解决方案9】:

                typeof(obj) 将在其他可能的值中返回一个类对象的“object”。

                【讨论】:

                  【解决方案10】:
                  if (!("someVar" in window)) {
                    someVar = loadObject();
                  }
                  

                  会告诉你之前是否有任何 JS 已分配给全局 someVar 或声明了顶级 var someVar

                  即使加载的值为undefined,它也可以工作。

                  【讨论】:

                    猜你喜欢
                    • 2011-05-01
                    • 1970-01-01
                    • 2011-08-18
                    • 1970-01-01
                    • 2011-11-12
                    • 2014-09-26
                    • 2014-01-10
                    • 1970-01-01
                    相关资源
                    最近更新 更多