次のような例をよく見かけます。
var a;
var b=!!a;
a のデフォルトは未定義です。 !a は true、!!a は false であるため、b の値は、主に後続の判断を容易にするために、未定義または他の値ではなく false になります。
!! 通常、次の式をブール型データ (ブール値) にするために使用されます。つまり、true または false のみを指定できます。
JavaScript は弱い型付けの言語であるため (変数は固定データではありません)。
a=parseInt(“1234″)
a=”1234″-0 //数値に変換
b=1234 ”” //文字列に変換
c= someObject. toString() // オブジェクトを文字列に変換します
最初と 4 番目のタイプは明示的な変換であり、2 番目と 3 番目のタイプは暗黙的な変換です
ブール変換JavaScript の規約ルールは次のとおりです。
false、未定義、null、0、"" は false、
true、1、"somestring"、[Object] は true
(null および未定義の場合) など他の暗黙的に変換された値については、! 演算子を使用すると true の結果が生成されるため、2 つの感嘆符を使用する目的は、これらの値を「同等の」ブール値に変換することです。
もう一度見てみましょう。 >
var foo; ;// 未定義の場合、感嘆符は true を返します。
alert(!goo);// null の場合、感嘆符も true を返します。
var o={flag:true}; 🎜>var test =!!o.flag;//var test=o.flag||false;
alert(test);
この例は、 uniffed および null の場合を示します。 1 つの感嘆符を使用すると true が返され、2 つの感嘆符を使用すると false が返されるため、2 つの感嘆符の役割は、変数の値が明示的に設定されている場合 (null/unified/0/"" などではない)、 result 変数の実際の値に基づいて返されます。設定されていない場合、結果は false になります。