在JavaScript中,以下内容给出了错误:
{ __proto__: [] } instanceof Array;
Run Code Online (Sandbox Code Playgroud)
如果我把它包围它(brackets)
没有错误:
({ __proto__: [] } instanceof Array);
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
当解释器看到a时{
,默认情况下,它会认为你正在声明一个新块,例如
{
console.log('foo');
}
Run Code Online (Sandbox Code Playgroud)
结果是:
{
__proto__: []
} instanceof Array
Run Code Online (Sandbox Code Playgroud)
没有多大意义 - 你不能instanceof
阻止.
但是,当它包裹在括号中解释知道要期待值在括号内,而不是块-所以它作为一个内部评估一切的表达,而是和(正确)解析{ __proto__: [] }
为对象.
这与为什么在对已经分配的变量进行解构时,必须在括号内添加括号的原因完全相同:
let x, y;
({x, y} = { x: 'foo', y: 'bar'});
console.log('done ' + x);
Run Code Online (Sandbox Code Playgroud)
有效,但它没有()
:
let x, y;
{x, y} = { x: 'foo', y: 'bar'};
console.log('done ' + x);
Run Code Online (Sandbox Code Playgroud)