2011年9月7日水曜日

サイ本5版 1部「コアJavaScript」  3章「データ型と値」 3.13~3.15.4


このエントリーをはてなブックマークに追加


オブジェクトから基本データ型への変換


nullでないオブジェクトは必ずtrueなので、falseに変換されるような値を持つオブジェクトでもtrueになる。



new Boolean(false)
new Number(0)
new String("")
new Array()



valueOf()メソッドとtoString()メソッドによる型変換

オブジェクトが数値に変換される場合



  • まずオブジェクトのvalueOfメソッドを呼び出す。

  • たいていは継承を遡り、ObjectのvalueOf()を実行。これは何もせずにオブジェクトを返す。

  • 次に、toString()メソッドが呼ばれ、文字列に変換

  • 文字列が数値に変換される。


要素が2つ以上の配列は"3,4,5"のような文字列から数値に変換することになるので、NaNになる


コンテキストによる型変換

+,比較演算子はコンテキストが曖昧なことがあり、この場合は↑のとおり、valueOf(),toString()が呼び出される。



  • Dateオブジェクトは例外

    • Dateオブジェクトは自分でvalueOf()とtoString()を持っているため、valueOf()で数値に変換される。

    • たいていのオブジェクトはvalueOf()を持っていない



  • valueOfは数値に変換するメソッドではない。「意味のある値」に変換するためのものであり、文字列を返してくることもある。



値と参照のルール



  • 基本型は値渡し、それ以外は参照

    • オブジェクトは参照。関数、配列もオブジェクトなので参照。



  • a = b;としたとき、aとbは同じ値をもつ別の変数なのか、それとも同じものをさす参照なのかは、変数に代入するものによる。

    • b=[1,2];など参照型ならa===b,

    • b = 1;なら、a==b




文字列は参照型か?


  • 実装による?

  • 文字列は不変(immutable)なので、どちらでもあまり関係ない。

  • ただし、同じ内容の文字列なら==でtrueになるので、このときは値により比較している。





0 件のコメント:

コメントを投稿