String() constructor creates string objects. Primitive strings are turned into objects behind the scenes if you call a method on them as if they were objects. Omitting
new gives you primitive strings.
Creating a string object and a string primitive:
> var s_obj = new String('potatoes'); > var s_prim = 'potatoes'; > typeof s_obj; "object" > typeof s_prim; "string"
The object and the primitive are not equal when compared by type with
===, but they are when compared with
== which does type coercion:
> s_obj === s_prim; false > s_obj == s_prim; true
length is a property of the string objects:
> s_obj.length; 8
If you access
length on a primitive string, the primitive is converted to an object behind the scenes and the operation is successful: ...