var a;
var b=!!a;
a のデフォルトは未定義です。 !a は true、!!a は false であるため、b の値は、主にその後の判断を容易にするために、未定義または他の値ではなく false になります。
!! 一般に、次の式を true または false のみにできるブール型データ (boolean) にするために使用されます。
JavaScript は弱い型指定の言語であるため (変数には固定のデータ型がありません)、必要な場合もあります。次のように、対応する型にキャストします:
a=parseInt(“1234″)
a=”1234″-0 //数値に変換
b=1234+”” //文字 String に変換
c=someObject.toString() // オブジェクトを文字列に変換します
1 番目と 4 番目は明示的な変換、2 と 3 は暗黙的な変換です
ブール型変換、JavaScript の規約ルール
false、未定義、null、0、 "" の場合は false
true、1、"somestring"、[Object] の場合は
null、未定義、および暗黙的に変換されるその他の値の場合、! 演算子を使用すると true の結果が生成されるため、使用の目的は2 つの感嘆符は、これらの値を「同等の」ブール値に変換します
===================== ========= ================================================= ==============================
まずは簡単な例で説明しましょう:
var o={flag:true};
var test=!!o.flag;//var test=o.flag||false;
alert(test);
! 演算子は null と unknown に使用されるため、true の結果が生成されます。 2 つの感嘆符を使用することは、o の flag の値が明示的に設定されている場合 (null/unknown/0""/ などではない)、当然、test は o.flag と同じになります。値が設定されていない場合、test は同じになります。デフォルトは false であり、null または未定義ではありません。
jQuery の典型的な例は次のとおりです: (jQuery 1.7.0.js: 748 行目)
grep: function(elems, callback, inv) {
var ret = [], retVal;
inv = !!inv;
// 配列を調べて、バリデーター関数を渡す項目のみを保存します
// for ( var i = 0, length = elems.length; i < length; i++ ) {
retVal = !!callback( elems [ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
}
grep 関数を使用する場合、指定されている場合3 番目のパラメータが null/unknown/0""/ ではない場合、inv は true、それ以外の場合は false です。この目的は、後の判断を容易にするために、inv と retVal の値が他の値ではなく true/false からのみ取得できるようにすることです。