0

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

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

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

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

4

1 回答 1

3

因为

{}['constructor']

被解析为

{
    // empty block
}
['constructor']

尝试输入

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

或者

({})['constructor']

你会得到预期的结果。{}总是被解析为一个空块,除非它没有意义(如上面的两个例子)。

Barmar 在评论中解释了第二个。简而言之,[1] !== [1]因为它们是两个不同的数组对象。

第三个示例有效,因为 JavaScript 知道您不能将块传递给函数,因此它假定一个空对象。

于 2013-07-30T05:22:43.313 回答