javascript - () 括号,它在 ({__proto__ : []} instanceof Array) in JavaScript 的语句中做了什么

标签 javascript

在 JavaScript 中,以下给出错误:

{ __proto__: [] } instanceof Array;

如果我将它括在 (方括号) 中,它没有错误:

({ __proto__: [] } instanceof Array);

这是为什么?

最佳答案

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

{
  console.log('foo');
}

结果:

{
  __proto__: []
} instanceof Array

没有多大意义 - 你不能 instanceof block 。

但是当它被括在圆括号中时,解释器知道期望圆括号内有一个,而不是一个 block - 所以它将圆括号内的所有内容计算为一个表达式,并且(正确地)将 { __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);

关于javascript - () 括号,它在 ({__proto__ : []} instanceof Array) in JavaScript 的语句中做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50034429/

相关文章:

javascript - 当 document.readystate==complete 与 onload 触发时一样吗?

javascript - 如何在 vue.js 中格式化以千、百万或十亿为单位的数字?

javascript - JS 当用户点击显示不同的颜色

javascript - 如何在 ngMaterial md-autocomplete 中过滤查询?

javascript - 包含具有指定属性值的子元素的列表项的选择器

Javascript 规模检查功能性能

javascript - 仅当 jQgrid 中未单击复选框时才清除先前的选择?

javascript - 如何处理图像背景的加载状态?

javascript - 闭包编译器需要入口点 "..."从未提供

javascript - 返回首页并平滑滚动