初始化JavaScript对象时,如何按需添加属性且避免使用if语句?
如何在JS对象初始化时仅按需添加属性?
嘿,这个需求我之前也碰到过——确实不想用额外的if语句打断对象字面量的写法,破坏代码的紧凑感对吧?给你几个符合预期的简洁方案:
方案1:ES6对象展开运算符(最推荐)
这是目前最常用也最直观的写法,利用ES6的展开运算符...来条件性地添加属性:
myFunction: function(msg){ return { name: "abc", time: 12345, // 条件满足时展开包含msg的对象,否则展开空对象(相当于啥也不加) ...(msg !== undefined && msg !== null ? { msg } : {}) }; }
这里{ msg }是{ msg: msg }的简写,当msg有效时,就把这个属性合并到主对象里;无效时合并空对象,完全不影响原结构。
方案2:简化条件判断(ES2020+)
如果你的运行环境支持ES2020及以上,还可以用msg != null来简化条件——这个表达式等价于msg !== null && msg !== undefined,专门用来排除这两个无效值:
myFunction: function(msg){ return { name: "abc", time: 12345, ...(msg != null ? { msg } : {}) }; }
这种写法更短,语义也清晰,一眼就能看出是排除null和undefined的情况。
方案3:短路赋值(紧凑写法)
如果你觉得展开运算符有点“花哨”,还有一种更传统的紧凑写法,利用逻辑与的短路特性,比原有的if语句更简洁:
myFunction: function(msg){ const jsonObj = { name: "abc", time: 12345 }; // 只有msg有效时才执行赋值操作 msg != null && (jsonObj.msg = msg); return jsonObj; }
这个写法本质还是条件判断,但把if压缩成了一行,不会额外增加代码块。
需要说明的是:你设想的那种直接在对象字面量里写三元表达式的语法,原生JavaScript并不支持,但上面的方案已经能实现你想要的“在初始化时按需加属性”的效果,而且代码足够简洁。
内容的提问来源于stack exchange,提问作者ocomfd
相关产品推荐
相关产品推荐

