无法将默认布尔参数设置为默认值

时间:2014-11-03 06:24:25

标签: javascript jquery

我一直在阅读有关为jQuery函数设置默认参数的方法。我喜欢在函数中创建一个JSON对象,并使用extend来合并任何传递的选项。但是现在我有一个定义如下的函数:

function SetGroup( convert ) { 
    convert = convert || true;
    ....
})

convert的值始终设置为true。以下列所有方式调用SetGroup()会导致convert == true:

SetGroup();
SetGroup(true);
SetGroup(false);

我有另一个参数,我设置了这样的默认值,它可以工作,但它也是一个字符串。我怀疑上面的问题是由于参数是一个布尔值?

如何使这个工作用于布尔参数?

1 个答案:

答案 0 :(得分:2)

将变量默认为true的variable = variable || true语法依赖于第一个参数是" falsey"在JS意义上。这意味着在布尔表达式中计算为false的variable的任何值都将被值true覆盖。

就像你提到的那样,当定义的值不是自然的" falsey" (例如,使用字符串或非零整数)。但是,这对布尔人来说并不起作用。正如您可能猜到的那样,false实际上是" falsey"。

根据定义,如果左边的操作数为false,则布尔OR运算符||返回右操作数。因此,如果左操作数始终是布尔值,则它将始终返回true,而右操作数始终为true

相反,试试这个:

function setGroup( convert ) { 
    convert = (convert != false);
    ....
})

如果convertundefined,那么它将是true。同样,如果它是true。如果convertfalse,则仍为false