2

mainobj.object_1 = mainobj.object_1 || []

好于 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }

在第一个示例中,javascript 似乎会将其值重新分配给自身,但可能不会。

除了第一个示例之外,还会将自己的值重新分配给自己,还是不做任何有价值的事情?

4

4 回答 4

0

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

所以它是关于你想要从你的代码中得到什么。

于 2013-03-11T18:30:26.837 回答
-1

他们做几乎相同的事情。

mainobj.object_1 = mainobj.object_1 || []

将查看mainobj.object_1它是否undefined不是null,否则分配它[]

if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }

mainobj.object_1将其与undefined. 通常也更好地使用===严格比较而不是==,它更快更明确。如果您要使用严格的比较,则必须将您的陈述调整为:

if (mainobj.object_1 === undefined || mainobj.object_1 === null){ mainobj.object_1 = []; } 

至于编码偏好,开发人员更喜欢较短的形式mainobj.object_1 = mainobj.object_1 || [];,因为它简洁易读。

于 2013-03-11T18:34:16.433 回答
-1

最好是

if(typeof mainobj.object_1 === "undefined"){
    mainobj.object_1 = [];
}

但是,如果您也想检查 null,那么您还必须添加null 检查。

第一种方法可能会导致一些不希望的事情。考虑下面的例子

var mainobj = {};
mainobj.object_1 = false;
mainobj.object_1 = mainobj.object_1 || [];
alert(mainobj.object_1);

这里的警报显示为空而不是假。请记住0, false, null, undefined, "" (empty string)NaN在 Javascript 中都是错误的。

另外,您需要记住这undefined不是javascript中的保留

于 2013-03-11T18:34:48.453 回答
-2

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

于 2013-03-11T18:28:52.950 回答