JavaScript では、文字列、数値、およびブール値はすべてプリミティブ型です。つまり、文字列、数値、およびブール値はオブジェクトの形式では存在しません。ただし、これら 3 つのプリミティブなタイプの値を操作する必要があるため、JavaScript はこれら 3 つのタイプの値を自動的にカプセル化し、プロパティとメソッドを備えたオブジェクトとして作成します。文字列を例にとると、このカプセル化プロセスは次のとおりです:
1. JavaScript は、文字列値の属性アクセスまたはメソッド呼び出しを検出すると、新しい String (文字列値) を呼び出して、文字列を String オブジェクトに自動的にカプセル化します。
2. JavaScript は、この新しく作成されたオブジェクトのプロパティまたはメソッドにアクセスし、対応する結果を返します。
3. 属性へのアクセスまたはメソッド呼び出しが完了すると、JavaScript は新しく作成されたオブジェクトをただちに破棄します。
次のコードを例にとると、JavaScript によって自動的に作成された String オブジェクトにプロパティを書き込むことは意味がありません。作成されたオブジェクトは、書き込みステートメントが終了すると存在しなくなるためです。
上記のコードの s 変数は常にプリミティブ文字列を表すことに注意してください。JavaScript によって自動的に作成される文字列オブジェクトは、s.length または s.newVariable オペレーションの実行中に存在します。これは、上記の実験のコードの最後の行から確認できます。
開発者は、プリミティブ値を自動的にカプセル化することに加えて、対応するプロセスを手動で実行することも選択できます。自動カプセル化とは異なり、手動カプセル化によって取得されたオブジェクトはすぐには破棄されないため、手動カプセル化されたオブジェクトに対して実行されるプロパティ書き込み操作は意味があります。
console.log(t === "テスト");//false