これがあなたのためのミニFAQです。
なぜオブジェクトがあるStringのですか?Number
プリミティブな値は、プロパティやメソッドを持っている"foobar"か、123持つことができないため、これらを実際に保持するオブジェクトが必要です。
オブジェクトはどのようStringに使用されますか?Number
これらは、エンジン自体によって暗黙的に使用されます。プリミティブのプロパティを評価するたびに、エンジンはこのためだけに新しい暗黙的なオブジェクトを作成します (これは「オートボクシング」と呼ばれます)。たとえば、次のようx = "foobar".lengthになります。
temp = new String("foobar")
x = temp.length
delete temp
自分のコードでStringandオブジェクトを使用できますか?Number
できますが、ほとんど必要ありません。自動ボックス化により、すべてのオブジェクトの props とメソッドをプリミティブ値で直接呼び出すことができます。if(x)...また、プリミティブとボックス化されたオブジェクトは、たとえばvs.など、状況によっては異なる動作をしますif(new String(x))...。
String()機能とはNumber()?
これらはStringおよびNumberオブジェクトのコンストラクタです。さらに、 を使用せずに直接呼び出すと、new型変換が実行されます。つまり、それぞれの型の新しいプリミティブ (オブジェクトではない) が返されます。疑似コードでは、背後にあるロジックは次のStringようになります。
function String(primitiveValue) {
primitiveString = convert_to_string(primitiveValue)
if called with new
return new StringObject(primitiveString)
else
return primitiveString
参考:http ://es5.github.io/#x15.5.1
String()への直接呼び出しはNumber()役に立ちますか?
はい!型キャストが必要になるたびに、これらを使用したいと思うでしょう。+xの代わりにNumber(x)またはx+""の代わりに のようなハックを好む人もいますString(x)が、明示的なキャストはよりきれいに見えます。
なぜtypeof new String()でありobject、ではないのstringですか?
によって作成されたものはすべて、new特定のコンストラクターが使用されているかどうかに関係なく、オブジェクトです。