首页 > 解决方案 > () 括号,它在 JavaScript 中 ({__proto__: []} instanceof Array) 的语句中做了什么

问题描述

在 JavaScript 中,以下给出错误:

{ __proto__: [] } instanceof Array;

如果我把它包围起来,(brackets)它就没有错误:

({ __proto__: [] } instanceof Array);

为什么是这样?

标签: javascript

解决方案


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

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


推荐阅读