JavaScriptのデータ型は、null、unknown、boolean、string、number、objectの6種類に分類されます。オブジェクトは参照型であり、他の5つの型は基本型またはプリミティブ型です。 typeof メソッドを使用して、何かがどのタイプに属しているかを出力できます。異なる型の変数を比較するには、まず型を変換する必要があります。これは、型変換と呼ばれます。型変換は、暗黙的な変換とも呼ばれます。暗黙的な変換は通常、演算子加算、減算、乗算、除算、等しい、より小さい、より大きいなどを使用して発生します。 。
typeof '11' //string typeof(11) //number '11' < 4 //false
まず足し算、引き算、掛け算、割り算について話しましょう:
1.文字列数値を加算すると、数値は文字列に変換されます。
2. 数値から文字列を減算し、文字列を数値に変換します。文字列が純粋な数値でない場合は、NaN に変換されます。文字列から数値を除いた場合も同様です。 2 つの文字列を減算すると、最初にそれらの文字列が数値に変換されます。
3. 乗算、除算、より大きい、より小さい、および減算の変換にも同じことが当てはまります。
//隐式转换 + - * == / // + 10 + '20' //2010 // - 10 - '20' //-10 10 - 'one' //NaN 10 - '100a' //NaN // * 10*'20' //200 '10'*'20' //200 // / 20/'10' //2 '20'/'10' //2 '20'/'one' //NaN
別の == セットを見てみましょう。
1. 未定義は null に等しいです
2. 文字列と数値を比較する場合、文字列は数値に変換されます
3. 数値がブール値と比較される場合、ブール値は数値
に変換されます。 4. 文字列とブール値を比較すると、両方とも数値に変換されます
// == undefined == null; //true '0' == 0; //true,字符串转数字 0 == false; //true,布尔转数字 '0' == false; //true,两者转数字 null == false; //false undefined == false; //false
基本型間の比較は比較的簡単です。参照型と基本型の比較は比較的複雑です。まず、参照型を基本型に変換してから、上記の方法に従って比較する必要があります。ブール値に変換された参照型はすべて true になります。たとえば、空の array は、それが object である限り参照型であるため、 [] は true になります。参照型を数値または文字列に変換するには、valueOf() または toString() を使用します。オブジェクト自体は valuOf() および toString() を継承し、valueOf() および toString() をカスタマイズすることもできます。オブジェクトに応じて、継承された valueOf() を使用して文字列、数値、またはそれ自体に変換します。オブジェクトは toString を使用して文字列に変換する必要があります。一般オブジェクトはデフォルトで valueOf() を呼び出します。 1. オブジェクトを数値に変換する場合は、valueOf(); を呼び出します。
まず、次の例を見てください。数値に変換するには、valueOf() を呼び出します。この前の最初の呼び出しは toString(); なので、valueOf メソッドは次のようになります。したがって、上記の例 0 == [] は、より合理的な次のように変更する必要があります。いずれの場合も、[] は最終的に 0 に変換されます。
0 == []; // true, 0 == [].valueOf(); -> 0 == 0; '0' == []; // false, '0' == [].toString(); -> '0' == ''; 2 == ['2']; // true, 2 == ['2'].valueOf(); -> 2 == '2' -> 2 == 2; '2' == [2]; // true, '2' == [2].toString(); -> '2' =='2'; [] == ![]; //true, [].valueOf() == !Boolean([]) -> 0 == false -> 0 == 0;
カスタマイズされた valueOf() と toString();
1. カスタマイズされた valueOf() と toString() は両方とも存在し、デフォルトで valueOf() が呼び出されます;
2. toString() のみがある場合、 call toString();
var valueOf = function (){ var str = this.toString(); //先调用toString(),转成字符串 //... } 0 == []; // true, 0 == [].valueOf(); -> 0 == '0' -> 0 == 0;
valueOf() を削除すると toString() が呼び出されます。
rreee他のものに戻ったらどうなりますか?
var a = [1]; a.valueOf = function (){ return 1;} a.toString = function (){ return '1';} a + 1; // 2, valueOf()先调用
他のオブジェクトは、valueOf() を呼び出して異なる型に変換します。
var a = [1]; a.valueOf = function (){ return 1;} a.toString = function (){ return '1';} a + 1; // 2, 先调用valueOf() //去掉valueOf delete a.valueOf; a + 1; // '11', 调用toString()
参照型間の比較はメモリ アドレスの比較であり、暗黙的な変換は必要ありません。ここでは詳しく説明しません。
var a = [1]; a.valueOf = function (){return ;} a.toString = function (){return 1 ;}; 1 - a; //NaN
明示的な変換は比較的単純で、クラスをメソッドとして直接使用して直接変換できます。
var a = {}; a.valueOf(); //Object {} var a = []; a.valueOf(); //[] 自己本身 var a = new Date(); a.valueOf(); //1423812036234 数字 var a = new RegExp(); a.valueOf(); // /(?:)/ 正则对象
以上がJavaScript における暗黙的な型変換に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。