()括号,它在JavaScript中的({__ proto:[]} instanceof Array)语句中做了什么

时间:2018-04-26 03:34:09

标签: javascript

在JavaScript中,以下内容给出了错误:



{ __proto__: [] } instanceof Array;




如果我在(brackets)中将其包围,则表示没有错误:



({ __proto__: [] } instanceof Array);




为什么会这样?

1 个答案:

答案 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);