2013-03-11 60 views
2

是在第一个例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }的Javascript定义的对象检查

mainobj.object_1 = mainobj.object_1 || []

更好它似乎JavaScript的将它的值重新分配给自己,但也许不会。

此外,第一个例子将自己的价值重新分配给自己或不做任何有价值的东西?

+0

我会去的第一个选项,因为它是短,看起来更好。 – VisioN 2013-03-11 18:27:00

+2

您提供的两个示例并不完全相同。为了简洁起见,首先是首选。 – zzzzBov 2013-03-11 18:27:02

+0

第一个选项总是不正确 – hop 2013-03-11 18:36:39

回答

-1

最好将

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

+0

赞成票的理由将不胜感激!我真的不知道什么是错误的答案 – hop 2013-03-11 18:43:58

+1

谢谢。我想你最好解释一下。 – phpdev76 2013-03-11 20:42:03

-2

两者都是正确的。第一个是整洁的。 但是在第二个中,您应该使用===而不是==来检查类型。

+0

为什么不扔一个'typeof'检查来检查类型? 'if(typeof mainobj.object_1 ==“undefined”)' – 2013-03-11 18:29:48

+0

你不应该使用'===',你试图检查一个错误的值,而不是特定的'undefined',这是第一个例子。 – MattDiamant 2013-03-11 18:30:22

+0

@RobinvanBaalen实际上,当'mainobj'被定义时它没有任何区别。 – VisioN 2013-03-11 18:30:35

0

如果您想检查它是否未定义,您必须使用第二个示例,因为如果对象为null,空字符串,零,未定义,NaN或false,则JavaScript返回false。

所以它关于你的代码到底需要什么。

+0

您会推荐什么样的解决方案1? – hop 2013-03-11 18:41:36

-1

他们做几乎相同的事情。

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 || [];,因为它的简洁和易于阅读。

+0

如果mainobj.object_1 == false,会发生什么情况? – hop 2013-03-11 18:39:25

+0

@hop如果您必须检查每种数据类型并查看是否有其他人与您的对象混淆,那么还有更重要的问题需要处理。 – sweetamylase 2013-03-11 18:44:06

+0

但是,绝对不是一个忽略的问题 – hop 2013-03-11 18:45:17