Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的javascript对象语法:{}[';构造函数';]_Javascript_Object_Syntax_Properties - Fatal编程技术网

奇怪的javascript对象语法:{}[';构造函数';]

奇怪的javascript对象语法:{}[';构造函数';],javascript,object,syntax,properties,Javascript,Object,Syntax,Properties,在浏览器的JS控制台中尝试以下操作: {}['constructor'] //==> ['constructor'] {}['constructor'] === ['constructor'] //==> false console.log({}['constructor']) //==> function Object() { [native code] } 计算的第一个表达式返回一个带有单个项的数组:'co

在浏览器的JS控制台中尝试以下操作:

{}['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总是一个块-除非在那里有一个块没有意义。我刚被教过!)