JavaScript条件式のブール判定

3501 ワード

もっと読む
JavaScriptでは、単独で判断式としての表現はif(aa)という条件判定の場合、aaaをブール型trueまたはfalseに変換して、その真偽を判断します.他の種類のブール型変換のルールは以下の通りです.
未割当値のみを定義する変数var aaに対して、その値はundefinedであり、falseである.    文字列:空の文字列''はブール型をfalseに変換します.他はtrueです.    数字:数字0はブール値をfalseに変換します.他はtrueです.    オブジェクト:nullのオブジェクトをブールに変換します.他はtrueです.    オブジェクトの属性値:宣言されていない属性値、属性値が0または空の列「」またはfalseまたはnullの場合、ブール値がfalseに変換され、残りはtrueになります.
==で判断する条件式if(aa==bb)とif(aaa)の場合、以下のようにエラーが発生しやすい例があります.

var a = "";
if(a==0){
	alert("  ==0  ");//  
}
if(0==a){
	alert("0==    ");//  
}
if(0){
	alert("0 true");
}else{
	alert("0 false");//  
}
var v = 0;
if(v){
	alert("  0    true");
}else{
	alert("  0    false");//  
}
if(v==false){
	alert("0==false  ");//  
}
	
var obj = new Object();
obj.aa = 0;
obj.bb = false;
if(obj.aa){
	alert("      0 true");
}else{
	alert("      0 false");//  
}
if(obj.bb){
	alert("      false true");
}else{
	alert("      false false");//  
}
	
if(obj.aa==obj.bb){
	alert("  ");//  
}
if(obj.bb==0){
	alert("  ++");//  
}
if(obj.bb==""){
	alert("  ++");//  
}

         true :
""==0
""==false
0==false
       true ,   :
0=="      "
0=="   0  "
0=="       000000000       "
まとめは以下の通りです
1.==と!=は比較演算子ですが、タイプが異なる場合はタイプ変換を行います.たとえば、false==0という条件は本当です.    2.==と!==タイプ変換はしません.タイプによって違いますので、false==0という条件はfalseです.    3.一般的に安全のために、使用==を比較します.
演算子==は等しいと読み、演算子==は同じと読む
等しい演算子:
操作数が同じタイプである場合、それらの等方性を判断し、2つの操作数の値が等しい場合、true(等しい)を返します.そうでなければfalse(等しくない)を返します.
操作数の種類が異なる場合は、このような状況で判断します.
1.nullとundefinedは等しいです.
2.そのうちの一つは数字で、もう一つは文字列で、比較規則は次の通りです.
    ifこの文字列は空の文字列「」または空の文字列「     ",この文字列を数字0に変換して比較します.例えば、
         0=“”はtrueです   0=="      「trueでもあります
    他の場合、先にこの文字列を数値に変換して比較します.例えば、12=="   12  「trueのための;
3.一つはtrueで、まず1(falseは0に変換)に変えて比較します.
4.一つの値が対象であり、もう一つが数字/文字列である場合、対象を元の値に変換する(valueOf()またはtostring()方法により、valueOf方法が優先される).
5.その他の場合は、直接falseに戻ります.
等分演算子:
操作数の種類が異なる場合は、値の判断を行わず、直接falseに戻ります.
操作数の種類が同じであれば、以下の状況に分けて判断します.
1.全部数字の場合、値が同じなら、両者は同じ(例外が一つあります.NaN、NaNはそれ自体と同じではありません)です.そうでなければ同じではありません.
2.文字列の場合、他のプログラム設計言語と同じで、文字列の値が異なると同じではない.
3.いずれもブール値であり、値はすべてtrue/falseであると同じです.そうでないと同じではないです.
4.2つの操作数が同じオブジェクト(配列、関数)を参照すると、両者は完全に同じです.そうでなければ同じではありません.
5.2つの操作数が全部null/undefinedであれば、同等でなければ同じではない.
たとえば:

var obj = {   
    id : "self",   
    name : "object"  
};   
var oa = obj;   
var ob = obj;   
alert(oa == ob);  //true 
alert(oa === ob);  //true
もう一つの対象の例を見てみます.

var obj1 = {   
    id : "self",   
    name : "object",   
    toString : function(){   
       return "object 1";   
    }   
}   
var obj2 = "object 1";   
alert(obj1 == obj2);   //true
alert(obj1 === obj2);  //false
Obj 1はオブジェクトであり、Obj 2は構造が全く異なる文字列であり、等しい操作子で判断すれば、両者は完全に同じである.
そのため、JavaScriptの中では、同等/同等のものを使って、同じ/同じではない場合には、必ずタイプの転換に注意してください.