What are the use cases for doing
new String("already a string")
There's very little practical use for
String objects as created by
new String("foo"). The only advantage a
String object has over a primitive string value is that as an object it can store properties:
var str = "foo"; str.prop = "bar"; alert(str.prop); // undefined var str = new String("foo"); str.prop = "bar"; alert(str.prop); // "bar"
String object rather than a string value. However, if you want to be absolutely sure you have a string value rather than a
String object, you can convert it as follows:
var str = new String("foo"); str = "" + str;
If the value you're checking could be any object, your options are as follows:
Don't worry about String objects and just use typeof. This would be my recommendation.
typeof str == "string".
Use instanceof as well as typeof. This usually works but has the disadvantage of returning a false negative for a String object created in another window.
typeof str == "string" || str instanceof String
Use duck typing. Check for the existence of one or more String-specific methods, such as substring() or toLowerCase(). This is clearly imprecise, since it will return a false positive for an object that happens to have a method with the name you're checking, but it will be good enough in most cases.
typeof str == "string" || typeof str.substring == "function"