{} .hasOwnProperty(' ID&#39);在控制台中返回语法错误

时间:2014-10-09 11:52:50

标签: javascript google-chrome

我在Chrome控制台中玩游戏,并想知道为什么这句话会引发语法错误:

{}.hasOwnProperty('id');

我的期望是返回值false Firefox和IE中也会出现语法错误 如果我使用空数组而不是空对象,则同样有效 如果我把括号括起来也一样:

({}.hasOwnProperty('id'));

2 个答案:

答案 0 :(得分:4)

有问题的代码段中存在语法歧义。 JavaScript中的大括号有两个含义:它们用于分隔代码块,例如:

if (x) {
    ...
}

它们用于声明对象文字:

var obj = {
    prop: "value"
}

Constext用于区分两种解释,如果是:

{}.hasOwnProperty('id');

大括号被解析为阻塞声明,因此会产生语法错误。另一方面:

({}.hasOwnProperty('id'));

无法在括号内声明块,因此{}在此上下文中被识别为对象文字。

答案 1 :(得分:0)

{} 被视为语句块而不是对象,正如您所期望的那样。因此错误。

编辑:正如@Cerbrus在评论中提到的那样,({})。hasOwnProperty(' id'); 将返回false而不是错误。这是因为当用括号括起{}时,它被解释为一个Object。