为什么使用 Object('123') 创建一个对象会创建一个 String() 对象,但 typeof 是 'object'?

3

请执行以下操作:

var x = Object('abc');

现在只需在控制台中键入x并点击回车即可。它将输出:
String {0: "2", 1: "3", 2: "2", 3: "3",....}

现在输入typeof x,你会得到object
这里发生了什么?
2个回答

2

对象构造函数返回一个根据传入值适当类型的对象实例。在您的情况下,您传入一个字符串原始值,因此会返回一个String对象。 (请注意,在JavaScript中,字符串原始值和String实例是两种不同的值。它可能很难区分,因为JavaScript在必要时自动将字符串原始值包装在String包装器中。)

typeof运算符对String实例返回"object"。


@Ben 不是的 - Object构造函数很奇怪。它会返回一个字符串实例,而不是对象实例。换句话说,Object("foo")new String("foo")会给你完全相同类型的结果。 - Pointy
但是 typeof(String('dfdf'))string,而 typeof(Object('dfd'))object,因此必须有所区别。 - Ben
1
@Ben 对不起 - 我应该说 Object("foo") 就相当于 new String("foo") - 当你不用 new 调用 String 构造函数时,它会返回一个字符串原始值。(以前的评论已编辑。) - Pointy
疯狂,但这就是答案!谢谢!我会尽快标记它。 - Ben
1
在这方面,String构造函数就像Number构造函数 - String(123)会给你"123",而Number("123")会给你123 - Pointy
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接