JavaScriptでオブジェクトを元の値に変換するルール

5275 ワード

JavaScriptのオブジェクトを元の値に変換するには、どのような原則に従いますか?P 52
ブール値オブジェクトからブール値へのオブジェクトの変換は非常に簡単です.すべてのオブジェクト(数字と関数を含む)がtrueに変換されます.包装対象についても同じです.new Booleanは元の値ではなく対象です.trueに変換されます.
オブジェクトと文字列オブジェクトと文字列(object-to-string)とオブジェクトから数字(object-to-number)への変換は、変換対象となるオブジェクトを呼び出す方法で行われる.一つの厄介な事実は、JavaScriptオブジェクトには2つの異なる方法で変換が行われ、借り物バンドで議論されるいくつかの特殊シーンがより複雑であることである.なお、ここで言及した文字列およびオブジェクトの変換規則は、ローカルオブジェクトのみに適用される.宿主オブジェクト(例えばWebブラウザで定義されたオブジェクト)は、それぞれのアルゴリズムに基づいて文字列と数字に変換することができる.
すべてのオブジェクトは2つの変換方法を継承します.最初はtoStering()で、このオブジェクトを反映する文字列を返す役割をします.デフォルトのtoString()メソッドは、興味深い値を返しません.
1  ({x:1,y:2}).toString()  //=>"[object object]"
【拡張読み:JavaScriptにおけるtoString()の方法】
多くの種類が、より多くの特定のバージョンのtoString()方法を定義している.例えば、配列クラスのtoString()メソッドは、配列要素ごとに文字列に変換し、要素間にカンマを追加して結果文字列に結合する.関数クラス(Function class)のtoStringメソッドは、この関数の実装定義の表現方式を返します.実際、ここでの実装は、通常、ユーザ定義の関数をJavaScriptソースコード文字列に変換するものである.日付クラス(Date class)で定義されたtoString()方法は、JavaScriptで解析可能な日付と時間の文字列を返します.RegExpクラス(RegExp class)で定義されているtoString()メソッドは、RegExpオブジェクトを正規表現の直接量を表す文字列に変換します.
1         [1,2,3].toString()//=>"1,2,3"
2         (function(x){ f(x); }).toString()//=>"function(x){
f{x);
}}"
3 /\d+/g.toString() //=>" /\d+/g" 4 new Date(2010,0,1).toString() //=>"Fri Jan 01 2010 00:00:00 GMT-0800
もう一つの変換対象の関数はvalueOf()です.この方法のタスクは詳細に定義されていません.元の値がある場合は、標準的にオブジェクトを元の値に変換します.オブジェクトは複合値であり、ほとんどのオブジェクトは元の値として本当に表現できないので、デフォルトのvalueOf()メソッドは元の値を返すのではなく、オブジェクト自体に単純に戻ります.配列、関数、正規表現はこの方法を単純に継承し、これらのタイプのインスタンスを呼び出すvalueOf()方法は単にオブジェクト自体に戻ります.日付クラス定義のvalueOf()メソッドは、1970年1月1日以来のミリ秒数を内部表示に戻します.【拡張読み:JavaScriptにおけるvalueOf()方法】
1            var d=new Date(2010,0,1);//=>2010 1 1 (     )
2            d.valueOf();//=>1262332800000
tostring()とvalueOf()を使うことで、文字列とオブジェクトを数字に変換することができます.ただし、ある特別なシーンでは、JavaScriptは完全に異なるオブジェクトから元の値への変換を実行していることに留意されたい.
JavaScriptのオブジェクトから文字列への変換は以下のような手順で行われています.
  • オブジェクトがString()方法を有する場合、この方法が起動される.元の値を返すと、JavaScriptはこの値を文字列に変換します.これは文字列ではない場合には、この文字列の結果を返します.元の値は文字列に変換されます.
  • オブジェクトがString()の方法がない場合、またはこの方法が元の値に戻らない場合、JavaScriptはvalueOf()の方法を呼び出す.この方法があるなら、JavaScriptはそれを呼び出す.戻り値が元の値である場合は、JavaScriptはこの値を文字列に変換し(文字列自体が文字列でない場合)、この文字列の結果を返します.
  • そうでないと、JavaScriptはtoString()またはvalueOf()から元の値を取得できませんので、このときはエラーの種類が例外となります.
  • 対象から数字への変換の過程で、JavaScriptは同じことをしました.ただ、まずvalueOf()の使い方を試してみます.
  • オブジェクトがvalueOf()方式を有し、後者が元の値を返すと、JavaScriptはこの元の値を数字に変換し(必要ならば)、この数字を返します.
  • そうでなければ、オブジェクトがtoString()方法を有する場合、後者は元の値に戻り、JavaScriptはそれを変換して返す.
  • そうでなければ、JavaScriptは一つのタイプのエラーをスローします.
  • オブジェクトが数値に変換される詳細は、なぜ空の配列が数字0に変換されるのか、そしてなぜ単一の要素を持つ配列が同じ数字に変換されるのかを説明しています.配列はデフォルトのvalueOf()メソッドを継承しています.この方法は元の値ではなくオブジェクトを返します.したがって、行列から数字への変換はtoString()メソッドを呼び出します.空配列変換は空文字列となり、空文字列は数字0に変換されます.要素を含む配列が文字列に変換された結果は、この要素変換文字列の結果と同じです.配列が1つの数字要素だけを含む場合、この数字は文字列に変換され、数値に変換されます.
    JavaScriptの+演算子は、数学的な加算と文字列の接続操作ができます.動作数がオブジェクトである場合、JavaScriptは、特別な方法を用いてオブジェクトを元の値に変換し、他の演算演算子を用いた方法ではなく、対象をデジタルに変換する.
    +和==適用されるオブジェクトから元の値への変換は、日付オブジェクトの特殊なケースを含む.日付クラスはJavaScript言語の中心の中で唯一の定義タイプであり、意味のある文字列と数字の種類への変換を定義しています.日付以外のすべてのオブジェクトについては、オブジェクトから元の値への変換は基本的にオブジェクトからデジタルへの変換(最初にvalueOf(を呼び出す)であり、日付オブジェクトは文字列への変換モードを使用するが、ここでの変換は上述したものと完全に一致しない.valueOf()またはtostring()によって返される元の値はそのまま使用される.強制的に数字や文字列に変換されません.
    と同じです
    「+」、「=」、「!=」および演算子は、このような特殊な文字列から元の値への変換方式を唯一実行する演算子です.他の演算子から特定のタイプへの変換は明確であり、日付オブジェクトに対しても特別な場合はありません.たとえば、「-」(マイナス記号)演算子は、両方の演算数を数字に変換します.以下のコードは、日付オブジェクトと「+」、「-」、「=」および「>」の実行結果を示しています.
    var now =new Date();//        
    typeof(now+1); //=>"string":“+”         
    typeof(now-1);//=>"number":"-"          
    now== now.toString(); //=>true:            
    now>(now-1);//=>true:">"        
     
    転載先:https://www.cnblogs.com/f6056/p/10893586.html