解构赋值疑问:为何原对象有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
相关产品推荐
相关产品推荐

