奇怪的javascript对象语法:{} ['constructor']

时间:2013-07-30 05:19:23

标签: javascript object syntax properties

在浏览器的JS控制台中试试这些:

{}['constructor']                      //==>  ['constructor']
{}['constructor'] === ['constructor']  //==>  false
console.log({}['constructor'])         //==>  function Object() { [native code] }

第一个表达式返回一个带有单个项目的数组:'constructor'但是,第二个表达式似乎与返回false的第一个表达式相矛盾。第三个将Object构造函数记录到控制台。

为什么后两个表达式与第一个表达式不一致?

1 个答案:

答案 0 :(得分:3)

由于

{}['constructor']

被解析为

{
    // empty block
}
['constructor']

尝试输入

var x = {}; x['constructor']

或者

({})['constructor']

您将获得预期的结果。 {}始终被解析为空块,之外没有意义(如上面的两个示例中所示)。

Barmar explains the second in the comments.简而言之,[1] !== [1]因为它们是两个不同的数组对象。

第三个例子有效,因为JavaScript知道你不能将一个块传递给一个函数,所以它假设一个空对象。