文字列プロパティを追加できますか?
Importance:5
次のコードを考えてください
let str = "Hello";
str.test = 5;
alert(str.test);
動作すると思いますか?何が表示されますか?
実際に実行してみましょう
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
use strict
を使用しているかどうかに応じて、以下の結果が得られます。
undefined
(strictモードではない)- エラー(strictモード)
なぜでしょうか?行(*)
で何が起こっているのかを後追いしてみましょう
str
のプロパティにアクセスすると、「ラッパークラス」が作成されます。- strictモードでは、そこに書き込むことはエラーです。
- それ以外の場合は、そのプロパティを使用した操作が実行され、オブジェクトは
test
プロパティを取得しますが、「ラッパークラス」が消えると、最終行ではstr
にそのプロパティの痕跡はなくなります。
この例は、プリミティブはオブジェクトではないことを明確に示しています。
追加のデータを保存することはできません。