奇怪的javascript对象语法:{}[';构造函数';]
在浏览器的JS控制台中尝试以下操作:奇怪的javascript对象语法:{}[';构造函数';],javascript,object,syntax,properties,Javascript,Object,Syntax,Properties,在浏览器的JS控制台中尝试以下操作: {}['constructor'] //==> ['constructor'] {}['constructor'] === ['constructor'] //==> false console.log({}['constructor']) //==> function Object() { [native code] } 计算的第一个表达式返回一个带有单个项的数组:'co
{}['constructor'] //==> ['constructor']
{}['constructor'] === ['constructor'] //==> false
console.log({}['constructor']) //==> function Object() { [native code] }
计算的第一个表达式返回一个带有单个项的数组:'constructor'
,但是,第二个表达式似乎与第一个表达式相反,返回了false
。第三个将对象
构造函数记录到控制台
为什么后两个表达式与前两个表达式不一致?因为
{}['constructor']
正在被解析为
{
// empty block
}
['constructor']
试着打字
var x = {}; x['constructor']
或
你会得到预期的结果<代码>{}总是被解析为空块,除了没有意义的地方(如上面的两个示例)
简而言之,[1]!==[1]
因为它们是两个不同的数组对象
第三个示例之所以有效,是因为JavaScript知道不能将块传递给函数,所以它假定为空对象 因为
{}['constructor']
正在被解析为
{
// empty block
}
['constructor']
试着打字
var x = {}; x['constructor']
或
你会得到预期的结果<代码>{}总是被解析为空块,除了没有意义的地方(如上面的两个示例)
简而言之,[1]!==[1]
因为它们是两个不同的数组对象
第三个示例之所以有效,是因为JavaScript知道不能将块传递给函数,所以它假定为空对象 请尝试
[1]==[1]
查看第二个错误的原因。每个数组文字都是一个不同的数组。@Barmar啊,是的!谢谢第三个呢?第三个得到了对象文本的构造函数
属性…@Ian我看到了,但是为什么第一个没有呢?试试[1]===[1]
看看第二个为什么是假的。每个数组文字都是一个不同的数组。@Barmar啊,是的!谢谢第三个呢?第三个得到了对象文本的构造函数
属性…@Ian我看到了,但是为什么第一个没有呢?试试({})['constructor']
现在开始有意义了。有没有什么指导说明什么时候{}
会被解析为一个对象而不是一个块?@Web总是一个块-除非在那里有一个块没有意义。我刚被教过!)再试试({})['constructor']
现在开始有意义了。有没有什么指导说明什么时候{}
会被解析为一个对象而不是一个块?@Web总是一个块-除非在那里有一个块没有意义。我刚被教过!)