2016-11-14 85 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」。 –