{}.hasOwnProperty('id');返回控制台中的语法错误

{}.hasOwnProperty('id'); returns syntax error in console

本文关键字:控制台 错误 语法 返回 id hasOwnProperty      更新时间:2023-09-26

我在Chrome控制台上玩了一番,想知道为什么这句话会引发语法错误:

{}.hasOwnProperty('id');

我的期望值是返回值false
Firefox和IE中也会出现语法错误
如果我使用一个空数组而不是一个空对象,这同样有效
如果我把支架放在周围,同样有效:

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

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

if (x) {
    ...
}

它们用于声明对象文字:

var obj = {
    prop: "value"
}

Constext用于区分这两种解释,在的情况下

{}.hasOwnProperty('id');

大括号被解析为块声明,所以这会产生语法错误。另一方面:

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

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

{}被视为语句块,而不是您所期望的对象。因此出现了错误。

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