String(x)和''有区别吗?

Is there a difference between String(x) and ''

本文关键字:有区别 String      更新时间:2023-09-26

有区别吗?字符串2会继承不同的对象原型吗?

var s1 = 1234 + '';
var s2 = String(1234);
//s1.someNewFunc();   error?
//s2.someNewFunc();

谢谢

var s1 = 1234 + '';

创建字符串字面值。这是一个javascript语言原语。

var s2 = String(1234);

String()函数也返回一个原始字符串字面值。S2将具有与s1相同的成员,因为它们都是相同的类型。

然而

var s3 = new String("1234");

将创建String类型的对象,而不是原始字符串字面值。它确实有不同的成员,并且是object类型。

一样!

var s1 = 1234 + '';
var s2 = String(1234);
typeof s1   //string
typeof s2   //string

两者的行为相同。

同样,这里有一个关于字符串原语和对象的很好的解释:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

string原语和string对象的区别

[…字符串字面值(由双引号或单引号表示)和字符串调用在非构造函数上下文中返回的字符串(即,不使用new关键字)是基本字符串。JavaScript会自动将原语转换为String对象,这样就可以对原语字符串使用String对象方法。[…]

Javascript允许您像对待对象一样对待原始值。它通过动态地将原语强制转换为对象来实现这一点。这就是为什么,即使原语没有属性,像这样的东西也是完全可以的:

"abcde".substr(1,3); //bcd
true.valueOf(); //true