JavaScript中({ a } = b)语法的含义及括号的作用是什么?
JavaScript 中
({ a } = b) 语法的括号作用详解 为什么单独写 { a } = b 是语法错误
JavaScript 解析器解析代码时,行首的 { 会默认被识别为 块语句 的起始标记,而不是对象解构的语法标识。此时 { a } = b 会被拆分解析为:一个包含单个表达式 a 的块语句,后面跟着非法的赋值运算符 = b,自然会抛出语法错误。
这里括号的实际作用
你提到的分组运算符规则在这里完全适用:包裹在 () 内的内容会被强制解析为 表达式,而非语句。
加了括号后,解析器不会再把 { 识别为块开头,而是会正确识别为对象解构赋值的语法,整个 { a } = b 作为合法的解构赋值表达式执行,完成从对象b中提取a属性赋值给变量a的操作。
你提供的代码正常运行的原因
let b = { a: 123123123 }; try { ({ a } = b); } catch (error) {} console.log({'a':a})
- 首先括号规避了解构赋值的语法错误,解构操作可以正常执行
- 非严格模式下,赋值操作中如果使用了未声明的变量
a,会自动在全局作用域创建该变量,因此即使赋值操作在try块(块级作用域)内完成,外部的console.log也可以正常访问到全局变量a的值,最终输出{a: 123123123}。
补充说明:如果是在严格模式下(代码开头加
'use strict'),给未声明的变量赋值会直接抛出引用错误,这段代码就无法正常运行了。
内容的提问来源于stack exchange,提问作者radiorz
相关产品推荐
相关产品推荐

