2008-09-18 92 views

回答

37

如果它是一个对象,那么你就应该能够进行检查,看它是否是nullundefined,然后加载它,如果它是。

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

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

+1

不是像if (myObject == null)(或未定义)就够了,因为这恰恰是简单相等的一点?或者我错过了什么? – PhiLho 2008-12-03 14:19:51

1

typeof(obj)将返回“对象”用于其他可能的值中的类的对象。

27
if(typeof(o) != 'object') o = loadObject(); 
+9

请记住,typeof返回“对象”的空值,所以你可能会想要类似[if(null!== x &&'object'== typeof(x)){] – 2008-09-18 23:10:52

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(); } 
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何时存在。

2

如果要检测一个自定义对象:

// craete a custom object 
function MyObject(){ 

} 

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

如果加载你的意思是定义,你可以使用typeof检查变量的类型功能。 无论其的typeof有几个怪癖,并将确定的对象,数组和为对象

alert(typeof(null)); 

确定一个null作为一个定义的对象可能会导致程序出现故障,所以检查喜欢的东西

if(null !== x && 'object' == typeof(x)){ 
    alert("Hey, It's an object or an array; good enough!"); 
} 
4
myObject = myObject || loadObject(); 
1
if (!("someVar" in window)) { 
    someVar = loadObject(); 
} 

会告诉你任何JS之前是否已经分配给格洛巴l someVar或宣布顶级var someVar

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

相关问题