2014-11-03 237 views
1

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

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

convert的值始终设置为true。呼叫个setgroup()在所有的转换通过以下方式结果的==真:

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

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

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

回答

2

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

就像你提到的那样,当定义的值不是自然的“伪造”(例如,使用字符串或非零整数)时,它可以很好地工作。但是,这对布尔值不起作用。正如你可能猜到的那样,false实际上是“虚伪的”。

根据定义,布尔或运算符||返回右操作数,如果左边的是falsey。所以如果左边的操作数总是布尔值,它总是返回true,而右边的总是true

相反,试试这个:

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

如果convertundefined,这将是true。同样如果它是true。如果convertfalse,它仍然是false