【发布时间】:2010-09-10 21:16:10
【问题描述】:
如何查看某个对象是否已加载,如果没有,如何加载,如下所示?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
【问题讨论】:
标签: javascript object
如何查看某个对象是否已加载,如果没有,如何加载,如下所示?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
【问题讨论】:
标签: javascript object
如果它是一个对象,那么您应该能够检查它是null 还是undefined,如果是则加载它。
if (myObject === null || myObject === undefined) {
myObject = loadObject();
}
使用typeof 函数也是一个选项,因为它返回所提供对象的类型。但是,如果对象尚未加载,它将返回 null or undefined,因此在可读性方面可能会归结为个人喜好。
【讨论】:
x == null 等价于:x === null || x === undefined(在全局变量undefined没有被修改的情况下)。因此,您可以只写myObject == null,而不是您的表达。它不仅更小,而且更健壮,因为它对变量 undefined 的赋值无关紧要。
if(typeof(o) != 'object') o = loadObject();
【讨论】:
myObject = myObject || loadObject();
【讨论】:
我不确定您所说的“已加载”是什么意思...变量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 何时存在。
【讨论】:
如果加载的意思是已定义,则可以使用 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!");
}
【讨论】:
您也可以只使用快捷方式if(obj)
【讨论】:
如果要检测自定义对象:
// craete a custom object
function MyObject(){
}
// check if it's the right kind of object
if(!(object instanceof MyObject)){
object = new MyObject();
}
【讨论】:
typeof(obj) 将在其他可能的值中返回一个类对象的“object”。
【讨论】:
if (!("someVar" in window)) {
someVar = loadObject();
}
会告诉你之前是否有任何 JS 已分配给全局 someVar 或声明了顶级 var someVar。
即使加载的值为undefined,它也可以工作。
【讨论】: