文字列プロパティを追加することはできる?
重要性: 5
次のコードを考えてください:
let str = "Hello";
str.test = 5;
alert(str.test);
あなたはどう思いますか?それはうまくいくでしょうか? 何が表示されますか?
動かしてみましょう:
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
結果は2種類あります::
undefined
- エラー
なぜでしょう? (*)
で何が起きているのかもう一度見てみましょう:
str
のプロパティにアクセスされたとき、“ラッパーオブジェクト” が作られます。- プロパティの操作はそこで行われます。なので、オブエジェクトは
test
プロパティを取得します。 - 操作が終了し、“ラッパーオブジェクト” は消えます。
なので、最後の行では str
はそのプロパティへのトレースを持っていません。
しかし、ブラウザによっては、プログラマをさらに制限し、プロパティをプリミティブに割り当てることを禁止することもあります。そのため実際には (*)
でエラーになることがあります。しかし、それは仕様からは少し離れています。
この例は、プリミティブがオブジェクトではないことを明確に示しています。
それらは単にデータを格納することができません。
すべてのプロパティ/メソッド操作は一時オブジェクトのヘルプによって実行されています。