下面的代码将返回一个对象:
alert(typeof new String("my string"));
但是当删除new时它会返回字符串:
alert(typeof String("my string"));
为什么?
答案 0 :(得分:2)
来自MDN:
字符串文字(用双引号或单引号表示)和非构造函数上下文中String调用返回的字符串(即不使用new关键字)是原始字符串。
当没有new调用时,它返回一个字符串原语,在Javascript中有“string”类型。使用new,它返回一个String对象。
在大多数情况下,它们是可以互换的, 例如,如果您访问字符串原语的属性,它将自动转换为String对象。
答案 1 :(得分:1)
String
是constructor
函数,用于创建String
的实例(object
)。
new运算符创建一个用户定义的对象类型的实例,或者一个具有构造函数的内置对象类型的实例。
并使用new来调用那些构造函数,就像强制转换,
所以即使你打电话给String(1);
您将获得"1"
(此处为typeof为字符串(原始类型))
答案 2 :(得分:0)
“new”关键字调用String类,这意味着您刚刚创建了一个新的String对象,这就是您的代码返回对象的原因。如果没有new
,您只需将内部对象转换为String。 (有关类型转换的详情,请参阅http://www.w3schools.com/js/js_type_conversion.asp)
答案 3 :(得分:0)
String("my string")
将类型转换其中的值转换为字符串,而new String("my string")
将返回一个新的对象new operator。
New运算符将调用Object类型的构造函数(在本例中为String)并创建此对象的实例。
答案 4 :(得分:0)
像"something"
和String("something")
这样的字符串文字被认为是原始类型。但是,使用new
关键字时,会像对象一样创建对该字符串的引用。您可以使用instanceof
关键字解决此问题。例如:
var something = new String("something");
if ((typeof something === "string") || (something instanceof String))
console.log("Its a string!");