2016-11-14 10 views
3

私は何かに設定されているか、または未定義の変数を持っています。変数が定義されている場合は、関数trueに渡したいと思います。ここに関数があります:明示的なブール変換

function f(areRowsSelectable){...} 

あなたは次のうちどれですか?

f(v); 


f(v?true:false); 

他に何か?

!!v 

例:

答えて

3

私は通常、明示的なブール変換のための二重否定(2回logical NOT operatorを適用することを意味する)を使用する代わりに

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

を、またBoolean(v)が働くだろう。

0

"typeOf"ガード方法を使用します。

「真実」の引数を受け入れないため、使用できるかどうかは関数によって異なります。

testsは基本的にczoselの答えと同じですが、鉱山だけtrueとしてboolean trueを受け入れながら、彼の答えは 『truthy』を返します。

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); 
 
}

EDIT 1

質問はいくつかの方法で解釈される可能性があるので、私はより多くのテストのカップルが含まれています。

  1. isTruthyは、czoselの答えと一致します。 1のような値truthytrueとして登録します。
  2. isBoolTrueは、値がboolean trueかどうかを厳密にチェックする私の最初の解釈でした。
  3. isDefinedは、変数に何かが含まれていれば単純に返します。
+0

"変数が定義されている場合はtrueに渡したい、そうでなければfalse" - >私はOPが実際に真理変換を求めていると思う。 –

関連する問題