2016-11-14 61 views
3

我有一个变量,它被设置为某个或未定义。如果变量定义为其他false,我希望传递给函数true。这里是功能:显式布尔转换

function f(areRowsSelectable){...} 

你会做什么?

f(v); 


f(v?true:false); 

还是别的什么?

回答

3

我通常使用双否定(这意味着施加logical NOT operator两次)显式布尔转换:

!!v 

实例:

!!'test' // true 
!!'' // false 
!!0 // false 
!!1 // true 
!!null // false 
!!undefined // false 
!!NaN // false 

可替代地,也Boolean(v)将工作。

0

我会使用“typeOf”防护方法。

它不接受“真理”的论点,所以它取决于你的功能是否可以使用它。

tests是基本相同czosel的回答,但他的回答返回‘truthy’而我只接受boolean truetrue

var tests = [ 
 
    //filled string 
 
    'test', 
 
    //empty string 
 
    '', 
 
    //Numeric empty 
 
    0, 
 
    //Numeric filled 
 
    1, 
 
    //Null 
 
    null, 
 
    //Completely undefined 
 
    , 
 
    //undefined 
 
    undefined, 
 
    //Not-A-Number numeric value 
 
    NaN, 
 
    //Boolean true 
 
    true 
 
]; 
 
for (var t = 0; t < tests.length; t++) { 
 
    var test = tests[t]; 
 
    var results = { 
 
    test: test, 
 
    isTruthy: !!test, 
 
    isBoolTrue: (typeof test != "boolean" ? false : test), 
 
    isDefined: (test !== void 0) 
 
    }; 
 
    console.log(results); 
 
}

编辑1

因为问题可以在几个方面进行解释,我已经包括一对夫妇的更多的测试。

  1. isTruthy匹配czosel的回答。注册truthy值如1true
  2. isBoolTrue是我的第一个解释,它严格检查值是否为boolean true
  3. isDefined只要返回变量是否包含任何内容。
+0

“我希望传递给一个函数,如果变量被定义,否则返回false” - >我认为OP实际上要求“truthy-conversion”。 –