What's the point of new String("x") in JavaScript?
What are the use cases for doing new String("already a string")
?
What's the whole point of it?
Solution 1:
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"
If you're unsure of what values can be passed to your code then I would suggest you have larger problems in your project. No native JavaScript object, major library or DOM method that returns a string will return a 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"
Solution 2:
Javascript creators created wrappers for basic types like string or int just to make it similar to java. Unfortunately, if someome makes new String("x") the type of the element will be "object" and not "string".
var j = new String("x"); j === "x" //false j == "x" //true