+、 - 、 *、 /、 /、==、!=などを実行する場合、JavaScriptでは、オペレーターの両側の値タイプが予想されるタイプと矛盾している場合、JavaScriptはオペレーターの両側の値を操作を実行する前に予想されるタイプに変換します。期待値タイプが文字列の場合、JavaScriptは値を文字列に変換します。期待値タイプが数字の場合、JavaScriptは値を数値に変換します(数値に変換できない場合、NANを返します)。例えば:
コードコピーは次のとおりです。
console.log(10 + "cats"); // 10匹の猫
console.log(10 * "cats"); // nan、「猫」はナンに変換されます
console.log(10 + "2"); // 102
console.log(10- "2"); // 8
console.log(10/"2"); // 5
console.log(10 * "2"); // 20
console.log(10 * "2"); // 20
console.log( "10" * "2"); // 20
値のタイプ変換ルール
JavaScriptの値変換ルールについては、表3-2を参照してください。 JavaScriptタイプの変換は、「JavaScript the Definitive Guide」の本の変換です。より注目すべき場所のいくつかは次のとおりです。
1.結果は、数値への未定義の変換後のNANになりました。
2。nullを数値に変換した後、結果は0です。
3.結果は、空の文字列 ""を数値に変換した後に0です。
4.結果は、-0を文字列に変換した後の「0」です。
5.結果は、空の配列[]を数値に変換した後に0です。
6.数字メンバー([9]など)が1つの数字のみを持つ配列は数に変換され、結果は数値(9)です。
JavaScriptが文字列を数値に変換するとき、さらに2つの興味深いルールがあります。
1。JavaScriptは、文字列の最初と端でホワイトスパース文字を変換する前に削除するため、「42」のような文字列は42番に正常に変換されます。
2。最初と端で白黒文字を削除した後、文字列に非数値文字がまだ含まれている場合、文字列はNANに変換されます。たとえば、「3 M」はNANに変換されます。
例:
コードコピーは次のとおりです。
console.log(10 * "3"); // 30
console.log(10 * "3 m"); // nan、 "3 m"はnanに変換されます
値のタイプ変換と比較
JavaScriptでは、等しい演算子(==)の使用には値の変換が含まれます。==演算子の両側の値タイプが一貫性がない場合、JSは判断を下す前にそれらを一貫した型に変換します。タイプ変換後に2つの異なるタイプの値が同等である可能性があることに注意してください。しかし、これは、==演算子を使用した結果が真でなければならないという意味ではありません。単純な例は未定義であり、偽りです。未定義のブール型に変換した後の未定義の結果は正確に偽ですが、実際には未定義の== falseの結果はfalseです。
明示的なタイプ変換
JavaScriptを使用した自動型変換は非常に便利ですが、コードの保守性などの問題を簡単に引き起こす可能性があります。プログラムコードをより明確にし、あいまいにするために、JSプログラムで明示的なタイプ変換が使用されることがあります。
コードコピーは次のとおりです。
番号( "3")// 3
文字列(false)// "false"
boolean([])// true
ほとんどの場合、明示的なタイプ変換の結果は、JS自動型変換の結果と一致しています。しかし、特別なケースがあります。NULLまたは未定義がオブジェクトに自動的に変換されると、JSはタイプエラーエラーをスローします。しかし、nullまたは未定義が明示的にオブジェクトに変換されると、JSは空のオブジェクトを返します。
コードコピーは次のとおりです。
console.log(object(undefined)); //空のオブジェクト
console.log(object(null)); //空のオブジェクト
同時に、明示的な変換で指定されたタイプがJSの自動変換によって指定されたタイプと異なる場合、得られた結果も異なります。たとえば、先に述べた未定義の== falseの結果はfalseです。変換タイプがブール値として明示的に指定されている場合、結果は真です。
コードコピーは次のとおりです。
console.log(undefined == false); // false
console.log(boolean(undefined)== boolean(false)); // true
自動型変換の使用
JSでは、値タイプの自動変換を使用して、次のようなオペレーターを介した明示的な変換と同じ効果を達成できます。
コードコピーは次のとおりです。
console.log(false + ""); // "false"
console.log(+false); // 0
console.log(!! 3); // true