marg-do's

関数型生活

ラッパーオブジェクト

js>var s = "test";
js>s.len = 4;
js>typeof(s.len)
undefined

なぜこのようなことになるのでしょう?

js>var s = "test";
この段階では、sは文字リテラル"test"自体を指している。

js>s.length;
s.lengthは(new String(s)).lengthと解釈され、新たなオブジェクトが生成される。
そして、(new String(s)).lengthが評価された時点でそのオブジェクトは捨てられる。
この時に作られた一時的なオブジェクトをラッパーオブジェクトと呼ぶ。

sは文字リテラル"test"を指したまま。

js>s.len = 4;
文字リテラルに対してプロパティを設定することはできない。(sはobject型ではなくstring型である)

js>typeof(s.len);
再びラッパーオブジェクトが生成されるが、このオブジェクトにlenプロパティは存在しない。