为什么“new String('my string');”返回一个对象?但是“String('my string');”返回一个字符串

时间:2016-01-14 06:46:02

标签: javascript

下面的代码将返回一个对象:

alert(typeof new String("my string"));

但是当删除new时它会返回字符串:

alert(typeof String("my string"));

为什么?

5 个答案:

答案 0 :(得分:2)

来自MDN

  

字符串文字(用双引号或单引号表示)和非构造函数上下文中String调用返回的字符串(即不使用new关键字)是原始字符串。

当没有new调用时,它返回一个字符串原语,在Javascript中有“string”类型。使用new,它返回一个String对象。

在大多数情况下,它们是可以互换的,  例如,如果您访问字符串原语的属性,它将自动转换为String对象。

答案 1 :(得分:1)

Stringconstructor函数,用于创建String的实例(object)。

new运算符创建一个用户定义的对象类型的实例,或者一个具有构造函数的内置对象类型的实例。

More about new here

并使用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!");