是在第一个例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
的Javascript定义的对象检查
mainobj.object_1 = mainobj.object_1 || []
更好它似乎JavaScript的将它的值重新分配给自己,但也许不会。
此外,第一个例子将自己的价值重新分配给自己或不做任何有价值的东西?
是在第一个例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
的Javascript定义的对象检查
mainobj.object_1 = mainobj.object_1 || []
更好它似乎JavaScript的将它的值重新分配给自己,但也许不会。
此外,第一个例子将自己的价值重新分配给自己或不做任何有价值的东西?
最好将
if(typeof mainobj.object_1 === "undefined"){
mainobj.object_1 = [];
}
但是,如果你想检查空过,那么你必须添加空检查为好。
第一种方法可能会导致不希望的事情。考虑下面的例子
var mainobj = {};
mainobj.object_1 = false;
mainobj.object_1 = mainobj.object_1 || [];
alert(mainobj.object_1);
在这里警报读取空而不是false。请记住0
,false
,null
,0 undefined
,""
(空字符串),NaN
在Javascript中都是错误的。
此外,你需要记住,undefined
是不保留字在JavaScript
两者都是正确的。第一个是整洁的。 但是在第二个中,您应该使用===
而不是==
来检查类型。
为什么不扔一个'typeof'检查来检查类型? 'if(typeof mainobj.object_1 ==“undefined”)' – 2013-03-11 18:29:48
你不应该使用'===',你试图检查一个错误的值,而不是特定的'undefined',这是第一个例子。 – MattDiamant 2013-03-11 18:30:22
@RobinvanBaalen实际上,当'mainobj'被定义时它没有任何区别。 – VisioN 2013-03-11 18:30:35
如果您想检查它是否未定义,您必须使用第二个示例,因为如果对象为null,空字符串,零,未定义,NaN或false,则JavaScript返回false。
所以它关于你的代码到底需要什么。
您会推荐什么样的解决方案1? – hop 2013-03-11 18:41:36
他们做几乎相同的事情。
mainobj.object_1 = mainobj.object_1 || []
能不能看看mainobj.object_1
,看看它不是undefined
,而不是null
,否则它分配[]
;
if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
这将其与undefined
比较之前做强制类型转换到mainobj.object_1
。通常更好地使用===
严格比较,而不是==
,它更快,更明确。而如果你使用严格的比较,你必须调整自己的声明:
if (mainobj.object_1 === undefined || mainobj.object_1 === null){ mainobj.object_1 = []; }
至于编码的喜好,开发商宁愿较短的形式mainobj.object_1 = mainobj.object_1 || [];
,因为它的简洁和易于阅读。
如果mainobj.object_1 == false,会发生什么情况? – hop 2013-03-11 18:39:25
@hop如果您必须检查每种数据类型并查看是否有其他人与您的对象混淆,那么还有更重要的问题需要处理。 – sweetamylase 2013-03-11 18:44:06
但是,绝对不是一个忽略的问题 – hop 2013-03-11 18:45:17
我会去的第一个选项,因为它是短,看起来更好。 – VisioN 2013-03-11 18:27:00
您提供的两个示例并不完全相同。为了简洁起见,首先是首选。 – zzzzBov 2013-03-11 18:27:02
第一个选项总是不正确 – hop 2013-03-11 18:36:39