まず、String 型の値とString オブジェクトの区別が付いていない。前者は値として扱われ、後者は参照を通じて扱われる。以下の二つのコードを比較せよ。 var s = "123"; s.property = "p"; p(s.property); var s = new String("123"); s.property = "p"; p(s.property); Boolean や Number についても同様。 内部構造を持つものが参照で扱われるオブジェクトであるというのは大まかには正しいが、それはプロパティが変更可能であるかどうかとは関係がない。String オブジェクトの length プロパティや RegExp オブジェクトの global プロパティは変更不可能だが、オブジェクトである以上内部構造は持っているし、変更不可能でないプロパティはもちろん変更できる。 でもって、