如何检查JavaScript中是否加载了变量?

时间:2020-03-06 14:23:01  来源:igfitidea点击:

我如何查看某个对象是否已加载,如果未加载,则如何加载它,如下所示?

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

解决方案

在其他可能的值中," typeof(obj)"将为类的对象返回" object"。

if(typeof(o) != 'object') o = loadObject();

如果它是一个对象,那么我们应该只能够检查它是否为null或者未定义,然后将其加载。

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

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

我不确定"加载"是什么意思...变量" 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(); }

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

特别是如果它在带有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何时存在。

如果要检测自定义对象:

// craete a custom object
function MyObject(){

}

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

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

如果我们是按定义加载,则可以使用typeof函数检查变量的类型。但是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!");
}

myObject = myObject || loadObject();