JavaScriptの中の二重感嘆符(!)作用例の紹介

1058 ワード

よくこのような例が見られます。
 
var a;
var b=!!a;
aはデフォルトはundefinedです。aはtrueですaはfalseですので、bの値はfalseです。undefinedではなく、他の値でもありません。主に後続の判断に便利です。後の表現をブール型のデータに強制的に変換するのに使われます。つまりtrueまたはfalseだけです。javascriptは弱いタイプの言語(変数には固定されたデータタイプがない)であるため、時には対応するタイプに強制的に変換する必要があります。同様のように、
 
a=parseInt(“1234″)
a=”1234″-0 //
b=1234+”” //
c=someObject.toString() //
のうち第1種、第4種は明示的に変換され、2、3は暗黙的にブール型に変換され、javascriptの規定はfalse、undefinded、null、0、”はfalstrue、string、string、string、str 1”[Object]はtrue対nullとundefinedなど他の隠し変換の値です。オペレータはtrueの結果を生むので、二つの感嘆符の役割はこれらの値を「等価」のブール値に変換することです。また、
 
var foo;
alert(!foo);//undifined , true;
alert(!goo);//null , true;
var o={flag:true};
var test=!!o.flag;// var test=o.flag||false;
alert(test);
の例では、undifinedとnullの場合、一つの感嘆符で返したのはtrueで、二つの感嘆符で返したのはfalseです。二つの感嘆符の役割は、変数の値(null/undifined/0/)「等値」が明確に設定されている場合、変数の実際の値によって返します。結果はfalseに戻ります。