ラッパーオブジェクト
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プロパティは存在しない。