nir*_*iry 4 javascript v8 destructuring node.js ecmascript-6
使用节点8.4.0:
$ node
> {x, y} = {x: 1, y: 2}
{ x: 1, y: 2 }
>
Run Code Online (Sandbox Code Playgroud)
但是,以下错误也是非交互式的:(唯一的区别是分号)
$ node
> {x, y} = {x: 1, y: 2};
...
Run Code Online (Sandbox Code Playgroud)
同样在Chrome控制台中:
> {x,y} = {x:1, y:2}
< {x: 1, y: 2}
> {x,y} = {x:1, y:2};
x VM253:1 Uncaught SyntaxError: Unexpected token =
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?
这不是关于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 =
Run Code Online (Sandbox Code Playgroud)
将对象解构为现有变量的正确语法是
({x, y} = {x: 1, y: 2});
Run Code Online (Sandbox Code Playgroud)
这允许{x, y} = {x: 1, y: 2}成为一种表达.否则{x, y}被解释为带逗号运算符的块,这会导致Unexpected token =错误.
它在控制台中没有括号和分号,因为它被视为表达式.这与效率相同
console.log({x, y} = {x: 1, y: 2});
Run Code Online (Sandbox Code Playgroud)
这不是一个错误,而是设计.请参阅" 无需声明的分配 ":
变量可以通过与其声明分开的解构来赋值.
Run Code Online (Sandbox Code Playgroud)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}
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |