You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:02:40