三元返回undefined?

时间:2011-01-28 20:05:16

标签: javascript jquery

我想仅在定义变量的情况下在对象上包含属性。我根本不想要这个属性。我甚至不希望它等于空白字符串。我在想这样的事情:

someFunc({
    bing: "bing",
    bang: (myVar) ? myVar : undefined,
    boom: "boom"
    }, "yay");

如果myVar未定义,我希望这与以下内容相同:

someFunc({
    bing: "bing",
    boom: "boom"
    }, "yay");

我做得对吗?

5 个答案:

答案 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"
}