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

时间:2008-09-18 19:13:42

标签: javascript object

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

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

10 个答案:

答案 0 :(得分:37)

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

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

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

答案 1 :(得分:27)

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

答案 2 :(得分:4)

myObject = myObject || loadObject();

答案 3 :(得分:3)

我不确定你的意思是“加载”...变量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(); }

答案 4 :(得分:3)

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

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

答案 5 :(得分:3)

如果通过加载表示已定义,则可以使用typeof函数检查变量的类型。 HOWEVER typeof有一些怪癖,会识别一个Object,一个数组和一个 null 作为对象

alert(typeof(null));

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

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

答案 6 :(得分:2)

如果要检测自定义对象:

// craete a custom object
function MyObject(){

}

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

答案 7 :(得分:2)

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

答案 8 :(得分:1)

typeof(obj)将返回类对象的“对象”以及其他可能的值。

答案 9 :(得分:1)

if (!("someVar" in window)) {
  someVar = loadObject();
}

会告诉您以前是否已将任何JS分配给全局someVar或宣布为顶级var someVar

即使加载的值为undefined,这也会有效。