4

我以前认为这两个作业a = "foo"a = new String('foo')是同一个东西。但是对于前一个声明,console.log(a instanceof Object)console.log(a instanceof String)返回false,而它返回后者的预期true

这看起来很奇怪,原因有两个。首先,即使是普通的声明a = 'foo',所有的字符串方法都在它上面工作,这表明它是从String对象继承的。其次,a.constructor返回String

任何人都可以解释发生了什么吗?

4

1 回答 1

3

"foo"是原始文字。

但是new String("foo")是String类的一个实例。

您可以在原始值上调用方法,因为

JavaScript 自动将原语转换为 String 对象,因此可以将 String 对象方法用于原语字符串。在原始字符串上调用方法或发生属性查找的上下文中,JavaScript 将自动包装字符串原始并调用方法或执行属性查找。

(来自MDN

于 2012-12-19T18:28:22.453 回答