![](/img/trans.png)
[英]Array destructuring assignment not working in v8 with harmony option in Node.js
[英]Node JS / V8 destructuring bug?
使用節點 8.4.0:
$ node
> {x, y} = {x: 1, y: 2}
{ x: 1, y: 2 }
>
但是,以下錯誤也是非交互式的:(唯一的區別是分號)
$ node
> {x, y} = {x: 1, y: 2};
...
同樣在 Chrome 控制台中:
> {x,y} = {x:1, y:2}
< {x: 1, y: 2}
> {x,y} = {x:1, y:2};
x VM253:1 Uncaught SyntaxError: Unexpected token =
誰能解釋一下?
這與按預期工作的 let、var 或 cosnt 解構無關。 這是關於先前定義的變量(或非嚴格模式):來自 chrome 控制台:
> let a, b;
< undefined
> [a, b] = [1, 2];
< >(2) [1, 2]
> a
< 1
> b
< 2
> {a, b} = {a:3, b:4}
< >{a: 3, b: 4}
> a
< 3
> b
< 4
> {a, b} = {a:3, b:4};
x VM1297:1 Uncaught SyntaxError: Unexpected token =
將對象解構為現有變量的正確語法是
({x, y} = {x: 1, y: 2});
這允許{x, y} = {x: 1, y: 2}
成為一個表達式。 否則{x, y}
被解釋為帶有逗號運算符的塊,這會導致Unexpected token =
錯誤。
它在控制台中無需括號和分號即可工作,因為它在那里被視為表達式。 這與有效地相同
console.log({x, y} = {x: 1, y: 2});
這不是錯誤,而是設計使然。 參見“ 無聲明賦值”:
可以通過與其聲明分開的解構來為變量賦值。
var a, b; ({a, b} = {a: 1, b: 2});
在沒有聲明的情況下使用對象字面量解構賦值時,賦值語句周圍的
( .. )
是必需的語法。
{a, b} = {a: 1, b: 2}
不是有效的獨立語法,因為左側的{a, b}
被視為塊而不是對象文字。然而,
({a, b} = {a: 1, b: 2})
是有效的,var {a, b} = {a: 1, b: 2}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.