javascript - () 括号,它在 JavaScript 中 ({__proto__: []} instanceof Array) 的语句中做了什么
问题描述
在 JavaScript 中,以下给出错误:
{ __proto__: [] } instanceof Array;
如果我把它包围起来,(brackets)
它就没有错误:
({ __proto__: [] } instanceof Array);
为什么是这样?
解决方案
默认情况下,当解释器看到 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);