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

soa*_*lue 4 javascript

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

{ __proto__: [] } instanceof Array;
Run Code Online (Sandbox Code Playgroud)

如果我把它包围它(brackets)没有错误:

({ __proto__: [] } instanceof Array);
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Cer*_*nce 6

当解释器看到a时{,默认情况下,它会认为你正在声明一个新块,例如

结果是:

{
  __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)