これはJavaScriptの癖に由来します。プリミティブ文字列とオブジェクト文字列があります。原始的な文字列は、まあ、あなたの日常の文字列です:
typeof "Hi! I'm a string!" // => "string"
ただし、を使用するときはいつでもnew
、プリミティブではなくオブジェクトを作成します。
typeof new String("Hi! I'm a string!") // => "object"
また、JavaScriptは、プロパティにアクセスするたびに、プリミティブ文字列からオブジェクト文字列を暗黙的に作成します。これは、オブジェクトのみがプロパティを持つことができるためです。
var s = "Hi! I'm a string!";
s.property = 6; // s implicitly coerced to object string, property added
console.log(s.property); // => undefined
// property was added to the object string, but then the object string was
// discarded as s still contained the primitive string. then s was coerced again
// and the property was missing as it was only added to an object whose reference
// was immediately dropped.
オブジェクト文字列は、その癖のためにほとんど必要ありません(たとえば、空のオブジェクト文字列は真実です)。したがって、を使用するのではなく、new String
ほとんどの場合、String
代わりに必要になります。オブジェクト文字列をプリミティブ文字列に戻すことさえできString
ません。new
typeof String(new String("Hi! I'm a string!")) // => "string"
この問題がTypeScriptで表面化するかどうかはわかりませんが、プリミティブ/オブジェクトの区別、特に真実性の問題は、で非常に奇妙になりBoolean
ます。例えば:
var condition = new Boolean(false);
if(condition) { // always true; objects are always truthy
alert("The world is ending!");
}
要するに、それはオブジェクト/プリミティブの区別のためです。ほとんどの場合、オプションがある場合はプリミティブが必要です。