仅当值已定义时向对象添加属性,是否有更优实现方式?
嘿,这个需求在日常开发里真的挺常见的,我来分享几种实用且优雅的实现方式,你可以根据自己的场景和环境来选择~
1. 基础条件判断(最直观易懂)
这是最直白的写法,适合简单场景,新手也能一眼看懂逻辑:
const destination = {}; const value = /* 你的目标值 */; // 这里可以根据需求调整判断逻辑:比如要不要排除空字符串、0这类"假值" if (value !== undefined && value !== null) { destination.value = value; }
如果你的「有值」定义是仅排除undefined和null,这个写法清晰无歧义,非常稳妥。
2. ES6扩展运算符+短路求值(简洁一行流)
想让代码更紧凑?可以利用对象展开和逻辑短路的特性,一行搞定:
const value = /* 你的目标值 */; const destination = { ...(value !== undefined && value !== null ? { value } : {}) };
当条件为真时,会展开{ value }这个对象给destination;条件不满足时,展开空对象,相当于什么都没添加。
3. ES2020+ 空值合并运算符(更精准的判断)
如果你的环境支持ES2020及以上,用??(空值合并运算符)能更精准地判断「有意义的值」——它会排除undefined和null,但保留0、''、false这些合法的假值:
const value = /* 你的目标值 */; const destination = {}; if (value ?? false) { destination.value = value; } // 同样可以写成一行版 const destination = { ...(value ?? false ? { value } : {}) };
这个比单纯的if (value)更严谨,不会误把业务上合法的假值当成「无值」排除。
4. 封装工具函数(适合复用场景)
如果这个逻辑在项目里多次出现,不如封装成通用函数,后续维护更方便:
function addPropIfValid(obj, propName, value) { // 这里可以统一调整判断规则,比如新增排除空字符串 if (value !== undefined && value !== null) { obj[propName] = value; } return obj; // 支持链式调用 } // 使用示例 const destination = addPropIfValid({}, 'value', yourTargetValue);
以后要修改判断规则,只需要改这一个函数就行,不用在代码里到处找地方调整。
小提醒
一定要明确你的「有值」定义:如果需要排除所有假值(包括0、''),直接用if (value)即可;如果要保留这些合法假值,就用value !== undefined && value !== null或者??来判断。
内容的提问来源于stack exchange,提问作者Frédéric Espiau
相关产品推荐
相关产品推荐

