レッスンに戻る

文字列プロパティを追加できますか?

Importance:5

次のコードを考えてください

let str = "Hello";

str.test = 5;

alert(str.test);

動作すると思いますか?何が表示されますか?

実際に実行してみましょう

let str = "Hello";

str.test = 5; // (*)

alert(str.test);

use strictを使用しているかどうかに応じて、以下の結果が得られます。

  1. undefined (strictモードではない)
  2. エラー(strictモード)

なぜでしょうか?行(*)で何が起こっているのかを後追いしてみましょう

  1. strのプロパティにアクセスすると、「ラッパークラス」が作成されます。
  2. strictモードでは、そこに書き込むことはエラーです。
  3. それ以外の場合は、そのプロパティを使用した操作が実行され、オブジェクトはtestプロパティを取得しますが、「ラッパークラス」が消えると、最終行ではstrにそのプロパティの痕跡はなくなります。

この例は、プリミティブはオブジェクトではないことを明確に示しています。

追加のデータを保存することはできません。