我想仅在定义变量的情况下在对象上包含属性。我根本不想要这个属性。我甚至不希望它等于空白字符串。我在想这样的事情:
someFunc({
bing: "bing",
bang: (myVar) ? myVar : undefined,
boom: "boom"
}, "yay");
如果myVar
未定义,我希望这与以下内容相同:
someFunc({
bing: "bing",
boom: "boom"
}, "yay");
我做得对吗?
答案 0 :(得分:5)
这之间存在差异:
var ex1 = {foo: undefined};
和此:
var ex2 = {};
因此,我会这样做:
var args = {
bing: 'bing',
boom: 'boom'
};
if (typeof myVar !== 'undefined') {
args.bang = myVar;
}
someFunc(args, 'yay');
答案 1 :(得分:3)
我会做类似
的事情var config = {
bing: "bing",
boom: "boom"
};
if (typeof myVar !== 'undefined') config.bang = myVar;
someFunc(config, 'yay');
你必须小心javascript的真实性和虚假性。如果定义了myVar,我的示例中的if语句只会将命令放在config上,但如果myVar定义为false,则它会起作用。
答案 2 :(得分:0)
最好的方法是
var args = {
bing: "bing",
bang: myVar,
boom: "boom"
}
if (myVar === undefined) {
delete args.myVar;
}
someFunc(args, "yay");
当它存在时清楚地添加它比在不存在时删除它更好。
关键是要处理类似于它的东西,使用本地delete
从对象中删除属性是最安全的。
您可以使用setTimeout和回调来破解它。我建议再试一次
var args = {
bing: 4,
bang: (myVar === undefined) ? (function() {
setTimeout(function() {
delete args.bang;
}, 0);
})() : myVar
}, "yay");
答案 3 :(得分:0)
var obj = {
bing: "bing",
boom: "boom"
}
myVar != null && obj.bang = myVar;
someFunc(obj, "yay");
上面的代码完成了工作。我认为你不能直接在函数调用中完成它。
答案 4 :(得分:0)
使用rest运算符。
var obj = {
bing: "bing",
...(myVar ? { bang: myVar } : {}),
boom: "boom"
}