オブジェクトから基本データ型への変換
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 件のコメント:
コメントを投稿