ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript における暗黙的な型変換に関する簡単な説明

JavaScript における暗黙的な型変換に関する簡単な説明

黄舟
黄舟オリジナル
2017-03-15 14:53:241420ブラウズ

JavaScriptデータ型は、null、unknown、boolean、string、number、objectの6種類に分類されます。オブジェクトは参照型であり、他の5つの型は基本型またはプリミティブ型です。 typeof メソッドを使用して、何かがどのタイプに属しているかを出力できます。異なる型の変数を比較するには、まず型を変換する必要があります。これは、型変換と呼ばれます。型変換は、暗黙的な変換とも呼ばれます。暗黙的な変換は通常、演算子加算、減算、乗算、除算、等しい、より小さい、より大きいなどを使用して発生します。 。

typeof '11'  //string       
typeof(11)  //number
&#39;11&#39; < 4     //false

基本型の変換

まず足し算、引き算、掛け算、割り算について話しましょう:

1.文字列数値を加算すると、数値は文字列に変換されます。

2. 数値から文字列を減算し、文字列を数値に変換します。文字列が純粋な数値でない場合は、NaN に変換されます。文字列から数値を除いた場合も同様です。 2 つの文字列を減算すると、最初にそれらの文字列が数値に変換されます。

3. 乗算、除算、より大きい、より小さい、および減算の変換にも同じことが当てはまります。

//隐式转换 + - * == / 
// + 
10 + &#39;20&#39;    //2010
// -
10 - &#39;20&#39;    //-10
10 - &#39;one&#39;   //NaN
10 - &#39;100a&#39;  //NaN
// *
10*&#39;20&#39;      //200
&#39;10&#39;*&#39;20&#39;    //200
// /
20/&#39;10&#39;      //2
&#39;20&#39;/&#39;10&#39;    //2
&#39;20&#39;/&#39;one&#39;  //NaN

別の == セットを見てみましょう。

1. 未定義は null に等しいです

2. 文字列と数値を比較する場合、文字列は数値に変換されます

3. 数値がブール値と比較される場合、ブール値は数値

に変換されます。 4. 文字列とブール値を比較すると、両方とも数値に変換されます

// ==
undefined == null;    //true
&#39;0&#39; == 0;            //true,字符串转数字
0 == false;           //true,布尔转数字
&#39;0&#39; == 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;
&#39;0&#39; == [];      // false, &#39;0&#39; == [].toString(); -> &#39;0&#39; == &#39;&#39;;
2 == [&#39;2&#39;];     // true, 2 == [&#39;2&#39;].valueOf(); -> 2 == &#39;2&#39; -> 2 == 2;
&#39;2&#39; == [2];     // true, &#39;2&#39; == [2].toString(); -> &#39;2&#39; ==&#39;2&#39;;

[] == ![];      //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 == &#39;0&#39; -> 0 == 0;

valueOf() を削除すると toString() が呼び出されます。

rreee

他のものに戻ったらどうなりますか?

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, valueOf()先调用

他のオブジェクトは、valueOf() を呼び出して異なる型に変換します。

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, 先调用valueOf()
//去掉valueOf
delete a.valueOf;
a + 1;        // &#39;11&#39;, 调用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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。