Javascript {}.hasOwnProperty('id');返回控制台中的语法错误
我在Chrome控制台中玩过,想知道为什么这个语句会抛出语法错误:Javascript {}.hasOwnProperty('id');返回控制台中的语法错误,javascript,google-chrome,Javascript,Google Chrome,我在Chrome控制台中玩过,想知道为什么这个语句会抛出语法错误: {}.hasOwnProperty('id'); 我的期望是返回值为false。 Firefox和IE中也出现语法错误。 如果我使用空数组而不是空对象,同样的情况也会发生。 如果我在周围放上大括号,同样也可以: ({}.hasOwnProperty('id')); {}被视为一个语句块,而不是您所期望的对象。因此出现了错误 编辑:正如评论中提到的@Cerbrus,{}.hasOwnProperty'id';将返回false而
{}.hasOwnProperty('id');
我的期望是返回值为false。
Firefox和IE中也出现语法错误。
如果我使用空数组而不是空对象,同样的情况也会发生。
如果我在周围放上大括号,同样也可以:
({}.hasOwnProperty('id'));
{}被视为一个语句块,而不是您所期望的对象。因此出现了错误
编辑:正如评论中提到的@Cerbrus,{}.hasOwnProperty'id';将返回false而不是错误。这是因为当用括号括住{}时,它被解释为一个对象。所讨论的代码段中存在语法歧义。JavaScript中的大括号有两种含义:它们用于分隔代码块,例如:
if (x) {
...
}
它们用于声明对象文字:
var obj = {
prop: "value"
}
Constext用于区分这两种解释,如果:
{}.hasOwnProperty('id');
大括号被解析为块声明,所以这会产生语法错误。另一方面:
({}.hasOwnProperty('id'));
不能在括号内声明块,因此{}在此上下文中被识别为对象文字。FYI:{}.hasOwnProperty'id';同样有效。{}不带括号或应用的运算符被解析为语句块,而不是对象文字。在这种情况下,{}将被解释为块语句,而不是对象文字。object.hasOwnProperty'id';返回false。我认为命名惯例可以解释这一点?这是一个完整的答案。