Javascript:如果未定义的运算符不起作用,则分配

时间:2014-02-07 15:03:15

标签: javascript undefined default-value

以下是我使用||运算符在参数为undefined时指定默认值的示例。

output = function (data) {
    console.log("data.flag =", data.flag);
}

main = function (flag) {
    output({
        flag: flag || true;
    });
}

main(true);  // data.flag = true 
main(false); // data.flag = true 

但是,操作将被忽略,因此始终分配默认值。我怎样才能解决这个问题?在JSFiddle上 - 您必须打开控制台才能看到输出。

4 个答案:

答案 0 :(得分:2)

当你传入false时,你有这个

flag: false || true;

如果您知道||如何运作,如果左侧是假的,那么它将采取右侧。

您需要检查未定义,因为false为FALSE

flag: flag!==undefined ? flag : true;

其他选项是检查参数长度

flag: arguments.length ? flag : true;

答案 1 :(得分:1)

|| 是'如果是未定义的运算符',虽然它的语义允许它以某种方式使用似乎就像那样做。它是 OR 运算符。当且仅当左侧为“falsey”时,它才会评估右侧 - 也就是说,当转换为布尔值时,它是false。来自MDN

  

如果可以转换为true,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,如果任一操作数为||true将返回true;如果两者都是false,则返回false

尝试使用更明确的测试:

output({
    flag: (typeof flag === "undefined") ? true : flag;
});

答案 2 :(得分:1)

你应该这样做:

flag: typeof flag === 'undefined' ? true : !!flag;

||不适合您想要使用它。如果它是真的,它将返回第一个操作数的结果,否则返回第二个操作数的结果。例如,false || true会返回true

如果trueflag,我的示例将返回undefined,并返回flag投放到布尔值(因此truefalse )否则 - 所以你最终得到一个干净的旗帜,没有技巧:)。

还有一个提示:不要使用你不理解的技巧:)。它们会导致奇怪的错误。

答案 3 :(得分:0)

您应该检查类型

main = function (flag) {
    output({
        flag: (flag===undefined)?true:flag;
    });
}