咨询ES6对象解构中默认值赋值的语法合法性
关于ES6对象解构中使用其他变量作为默认值的合法性确认
没问题,我来帮你把这个点讲清楚——这种写法完全是符合ES6规范的合法语法,你完全可以放心用!
举个你描述场景的具体例子,比如这样的代码:
const { a, b = a } = targetObject;
这段代码的逻辑是:从targetObject中解构出a,如果targetObject里没有b或者b的值是undefined,就把a的值赋给b。
这里有个关键细节要注意:被用来做默认值的变量必须在当前解构项之前被声明/解构出来。比如如果你写成{ b = a, a },就会抛出ReferenceError,因为当计算b的默认值时,a还没被解构初始化,属于“在初始化前访问变量”的错误。
再给你几个实际运行的例子加深理解:
- 当目标对象只有
a时:const obj = { a: 123 }; const { a, b = a } = obj; console.log(b); // 输出 123 - 当目标对象的
b有有效值(非undefined)时:const obj = { a: 123, b: 456 }; const { a, b = a } = obj; console.log(b); // 输出 456,优先用对象自身的b值
你提到转译为ES5后能正常运行,这其实也侧面印证了语法的合法性——像Babel这类转译工具会严格遵循ES6规范,把这种解构逻辑转换成ES5的常规赋值代码,比如上面第一个例子会被转译成类似:
var obj = { a: 123 }; var a = obj.a; var b = obj.b === void 0 ? a : obj.b;
这种ES5代码自然能正常运行。
内容的提问来源于stack exchange,提问作者Dennie de Lange
相关产品推荐
相关产品推荐

