最近详细研读阮一峰的es6入门这本书,在读到解构这一章时,里面嵌套赋值有这样的一个例子:
let obj = {};
let arr = [];
({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true });
obj // {prop:123}
arr // [true]
这个例子我在chrome控制台运行没有问题,但是我之前没有见过这样的写法,为什么{foo: obj.prop, bar: arr[0]} = {foo: 123, bar: true}
这样的写法要带一个括号才行,不带就会报错: Uncaught SyntaxError: Unexpected token =
请知道的解答一下疑惑,谢谢。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我猜:
如果不带括号,左边被认为是一个对象字面量,给对象字面量赋值当然是错的。
但是带了括号,整个赋值就被认为是解构赋值了……
具体啥原因我也没明白,我认为两种情况都是形式上正确的表达式,都应该能正确识别才对,不清楚不带括号的时候是不是会引起歧义,可能需要去 SPEC 里找找答案。