「JavaScript」操作数隠蔽タイプ変換
2799 ワード
JavaScriptは非常に許容されるタイプの言語で、コードを作成する過程で、多くのコードが直接に異なるタイプの操作数を操作するのを見ます.時にはコードの作成にとても便利です.チェックしないタイプのほうがコードに隠れていることもあります.デバッグする時、JavaScriptが自動的に実行するタイプの変換についてよく知っていると、問題の所在点が分かりにくいです.
PS:オブジェクト→基本タイプの変換ルールは「JavaScriptアドバンストプログラミングガイド」を参照してください.
一、マイナス、乗号、除号、型取り…
マイナス、乗算、除算、取込みなどの操作は比較的単純な操作です.これらのオペレータは、彼らの操作数を数字に変換する(
同じ(一)ですが、両方の操作数が文字列の場合&変換できない場合の戻り値は異なります.両方の操作数が文字列である場合、よく知られている文字列比較、すなわち左から右へ順番に各文字のASCIIコードを比較し、オペレータに該当する場合は
この2つの演算子は、ほとんどが(1)と同じで、違いは次の通りです.文字列op文字列:タイプ変換を行わず、直接比較します. オブジェクトopオブジェクト:参照はすべて同じオブジェクトを指しています.
特に指定されていない場合は、(一)を参考にします.対象+対象などですが、以下のような例外があります.文字列+文字列:文字列スティッチング動作を行います. 文字列+その他:他の文字列を文字列に変換してスティッチングを行います.
DEMO
【重要なヒント】おすすめとコレクションを忘れないでください.
PS:オブジェクト→基本タイプの変換ルールは「JavaScriptアドバンストプログラミングガイド」を参照してください.
一、マイナス、乗号、除号、型取り…
マイナス、乗算、除算、取込みなどの操作は比較的単純な操作です.これらのオペレータは、彼らの操作数を数字に変換する(
Number()
を使用して)試みます.もし操作数が数字に変換できないなら、彼らの結果はNaN
です.NaN
は、これらの動作を任意の数で行い、結果はNaN
である. // Demo1.html
var obj = {
valueOf: function() {
return 18;
}
};
var obj2 = {
valueOf: function() {
return 19;
}
};
console.log(
1 - "2", // -1
"32" - "22", // 10
obj % 4, // 2
obj * obj2, // 342
"99b" * 10 // NaN
);
二、大きい、小さい、等しい、小さい同じ(一)ですが、両方の操作数が文字列の場合&変換できない場合の戻り値は異なります.両方の操作数が文字列である場合、よく知られている文字列比較、すなわち左から右へ順番に各文字のASCIIコードを比較し、オペレータに該当する場合は
true
に戻ります.そうでなければfalse
に戻ります.操作数を数字に変換できない場合は常にfalse
に戻る.Boolean(NaN) == false
// Demo2.html
var obj = {
valueOf: function() {
return 18;
}
};
console.log(
1 <= "2", // true
"1" <= "a", // true
obj >= "17" // true
);
三、=、この2つの演算子は、ほとんどが(1)と同じで、違いは次の通りです.
true
です. // Demo3.html
var obj = {
valueOf: function() {
return 18;
}
};
var obj2 = {
valueOf: function() {
return 19;
}
};
console.log(
obj == obj2, // false
"XD" == "XD", // true
obj == 18, // true
obj2 == "19" // true
);
暖かいヒント:null == undefined // true
四、プラス記号(+)特に指定されていない場合は、(一)を参考にします.対象+対象などですが、以下のような例外があります.
// Demo4.html
var obj = {
toString: function() {
return "18s";
},
valueOf: undefined
};
var obj2 = {
toString: function() {
return "19b";
},
valueOf: function() {
return 19;
}
};
console.log(
obj + obj2, // "18s19"
obj2 + obj2 // 38
);
注意上記obj + obj2
の結果は「18 s 19 b」ではありません.操作数に文字列がないので、(一)の変換規則を参照します.DEMO
【重要なヒント】おすすめとコレクションを忘れないでください.
git clone https://github.com/JasonKid/fezone.git
検索操作数の暗黙タイプ変換