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)の場合、以下のようにエラーが発生しやすい例があります.
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であれば、同等でなければ同じではない.
たとえば:
そのため、JavaScriptの中では、同等/同等のものを使って、同じ/同じではない場合には、必ずタイプの転換に注意してください.
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の中では、同等/同等のものを使って、同じ/同じではない場合には、必ずタイプの転換に注意してください.