簡體   English   中英

Node JS / V8 解構錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM