在JavaScript中,以下内容给出了错误:
{ __proto__: [] } instanceof Array;

如果我在(brackets)
中将其包围,则表示没有错误:
({ __proto__: [] } instanceof Array);

为什么会这样?
答案 0 :(得分:6)
当解释器看到{
时,默认情况下,它会认为您正在声明一个新块,例如
{
console.log('foo');
}
结果:
{
__proto__: []
} instanceof Array
没有多大意义 - 你不能instanceof
阻止。
但是当它包含在括号中时,解释器知道在括号内部而不是块中需要值 - 因此它将内部的所有内容评估为表达式,并且(正确地)将{ __proto__: [] }
解析为对象。
这正是为什么,当解构为已经分配的变量时,你必须在括号内加上括号:
let x, y;
({x, y} = { x: 'foo', y: 'bar'});
console.log('done ' + x);
有效,但没有()
:
let x, y;
{x, y} = { x: 'foo', y: 'bar'};
console.log('done ' + x);