オブジェクトとプリミティブ
色々参考書を読んでいくと、頭が混乱してきたので、自分の為のメモ
1
var str = "test" ; str.say = "hello" ; alert( str ) ; // testと表示 alert( str.say ) ; // undefindと表示
2
var str = {} ; str.say = "hello" ; alert( str ) ; // Objectと表示 alert( str.say ) ; // helloと表示
上のコードと下のコードを自分なりに一番わかりやすく調べる。
3
var str = "test" ; alert( typeof str ) ; // String var str = {} ; alert( typeof str ) ; // Object var str="test"; str.toString = "convert string" ; alert( str.toString ) ; //function toString() { [native code] } と表示
1と2の違い、
1では、strはプリミティブになる。
2では、strはオブジェクトになる。
javascriptでは、オブジェクトには、プロパティ値を設定できるが、プリミティブ値には、プロパティ値を設定できない。なので、1のコードでは、undefindと表示されてしまうのだ。
ちなみにプリミティブとは、クラスのようなものになる。なので、1のstrは、String型のクラスそのものになる。また、3のコードで、str.toStringを設定しようとしたが、表示した結果が function ~~~ みたいになるのは、もともとあるjavascriptのStringオブジェクトのtoString関数が呼ばれてしまったせいである。
という事は、1のコードで、str.sayというプロパティ値を設定したいのであれば、strを以下のようにオブジェクトとして、宣言すればよい。
var str = new String("test") ; str.say = "hello" ; alert( str ) ; // testと表示 alert( str.say ) ; // helloと表示