JavaScriptでは、文字列、数値、およびブール波はすべて原始的な基本タイプです。つまり、文字列、数値、およびブール値はオブジェクトの形では存在しません。ただし、これらの3つの原始タイプを操作する必要があるため、JavaScriptはこれらの3つのタイプの値を自動的にカプセル化して、オブジェクトとしてプロパティとメソッドを持つようにします。文字列を例にとると、このカプセル化プロセスは次のとおりです。
1. JavaScriptがプロパティアクセスまたは文字列値へのメソッド呼び出しに遭遇すると、[文字列値)が呼び出され、文字列を文字列オブジェクトに自動的にカプセル化します。
2。JavaScriptは、新しく作成されたオブジェクトのプロパティまたはメソッドにアクセスし、対応する結果を返します。
3.プロパティアクセスまたはメソッドコールが完了した後、JavaScriptはすぐに新しく作成されたオブジェクトを破壊します。
例として、書き込みステートメントが終了した後に作成されたオブジェクトが存在しなくなったため、JavaScriptによって自動的に作成された文字列オブジェクトに属性を書き込むことは意味がありません。
コードコピーは次のとおりです。
var s = "test";
s.length = 9;
console.log(s.length); //まだ4
s.NewVariable = 9;
console.log(s.newvariable); // undefined
console.log(s === "test"); // true
上記のコードのS変数が常に原始文字列を表していることは注目に値します。 JavaScriptによって自動的に作成された文字列オブジェクトは、S.LengthまたはS.EnewVariable操作の実行中に存在します。これは、上記の実験のコードの最後の行から検証できます。
プリミティブ値を自動的にカプセル化することに加えて、開発者は対応するプロセスを手動で実行することも選択できます。自動カプセル化とは異なり、手動カプセル化によって得られる結果のオブジェクトはすぐに破壊されないため、手動でカプセル化されたオブジェクトのために採取されたプロパティの書き込み操作は意味があります。
コードコピーは次のとおりです。
var t = new String( "test");
t.length = 9;
console.log(t.length); //まだ4、長さの属性は読み取り専用です
T.NewVariable = 9;
console.log(t.newvariable); // 9
console.log(t == "test"); // true
console.log(t === "test"); // false