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

解构赋值疑问:为何原对象有items时未触发默认值Gorilla?

解构赋值默认值的生效逻辑解析

嘿,我来给你把这个问题掰明白——核心是你误解了对象解构赋值里默认值的触发条件!

先看你写的这段代码:

'use strict'; 
let options = { size: 100, items: "Piggi" };
let { title="Menu", items:w="Gorilla", size } = options;

这里的items:w="Gorilla"规则是:只有当源对象options里没有items属性,或者items的值是undefined时,w才会使用默认值Gorilla。但你现在的options里明确有items: "Piggi",不管这个值是什么(哪怕是空字符串、0这类假值),只要它不是undefined且属性存在,解构时就会直接把"Piggi"赋值给w,默认值根本不会触发。

这就是为什么你删除items: "Piggi"后,w会变成Gorilla——因为此时options里没有items属性,解构逻辑就会启用默认值。

如果你的需求是即使items存在,但值是"Piggi"时也用默认值,那得手动加判断逻辑,比如:

'use strict'; 
let options = { size: 100, items: "Piggi" };
let { title="Menu", items:w = "Gorilla", size } = options;
// 手动替换特定值为默认值
w = w === "Piggi" ? "Gorilla" : w;
let a = title; 
let b = w; 
console.log(a + " - " + b); // 现在会输出"Menu - Gorilla"

最后再给你划个重点:

  • 对象解构的默认值仅在属性不存在或**属性值为undefined**时生效
  • 其他任何值(包括null、空字符串、0等)都会直接覆盖默认值

内容的提问来源于stack exchange,提问作者Sviat Kuzhelev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:29