在 JavaScript 中,有三种声明字符串的形式:
var str = "string"
var str2 = String("string")
var str3 = new String("string")
第一种和第二种是相同的。第三种严格意义上讲不算是声明字符串,而是使用 String
生成一个 object
。
String
可以看一下 MDN 对 String 的定义:https://developer.mozilla.org/cn/docs/Web/JavaScript/Reference/Global_Objects/String
String 全局对象是一个用于字符串或一个字符序列的构造函数。
可以看到,String
的本质是一个函数。String(thing)
将 thing
变成一个字符串并返回。
new String
要想弄明白 new String
到底做了什么工作,就要先明白 JavaScript 的 new
运算符做了哪些事情:
- 创建了一个新的对象,对象类型为
object
; - 设置这个新的对象的内部、可访问性和
[[prototype]]
属性为构造函数(指prototype.construtor
所指向的构造函数)中设置的; - 执行构造函数,当
this
关键字被提及的时候,使用新创建的对象的属性; - 返回新创建的对象。
new String
生成了一个完整的 object
,并不是一个字符串。
===
& typeof
明白了以上两点,就很好解释 String
与 new String
的区别了。对于文章开头出现的代码,我们能得到以下的结果。
str === str2 // true
str === str3 // false
typeof str // string
typeof str3 // object