Javascript 为什么使用object(';123';)创建一个String()对象,而typeof是';对象';?

Javascript 为什么使用object(';123';)创建一个String()对象,而typeof是';对象';?,javascript,Javascript,这样做: var x = Object('abc'); 现在只需在控制台中键入x,然后单击enter。它将输出: String {0: "2", 1: "3", 2: "2", 3: "3",....} 现在键入typeof x,您将得到对象 这里发生了什么?对象构造函数返回一个对象的实例,该对象的类型适合于传入的值。在本例中,您传入一个字符串原语值,这样您就可以得到一个字符串对象。(注意,在JavaScript中,字符串原语值和字符串实例是两种不同的值。这可能很难区分,因为JavaScri

这样做:

var x = Object('abc');
现在只需在控制台中键入
x
,然后单击enter。它将输出:

String {0: "2", 1: "3", 2: "2", 3: "3",....}
现在键入
typeof x
,您将得到
对象


这里发生了什么?

对象构造函数返回一个对象的实例,该对象的类型适合于传入的值。在本例中,您传入一个字符串原语值,这样您就可以得到一个字符串对象。(注意,在JavaScript中,字符串原语值和字符串实例是两种不同的值。这可能很难区分,因为JavaScript会在情况需要时自动将字符串原语包装在字符串包装器中。)

typeof
操作符返回字符串实例的“object”

var x = ""; 
是基本类型字符串

var x = Object('abc'); 
是一个对象字符串

查看“类型”部分了解更多信息:

我注意到
y=String('1212')
返回类型为
String
的对象。所以你可以有一个对象构造函数的字符串实例,也可以有一个字符串构造函数的字符串实例?这两种类型本质上是不同的?@benno-对象构造函数很奇怪。它返回一个字符串实例,而不是对象实例。换句话说,
Object(“foo”)
给出的结果与
newstring(“foo”)
的结果完全相同@Ben我试图通过使用小写字母表示原语,大写字母表示对象来区分String原语类型和String对象类型。@Ben哦,对不起,我应该说
Object(“foo”)
new String(“foo”)
相同-在没有
new
的情况下调用字符串构造函数时,字符串构造函数会返回一个字符串原语值。(旧评论编辑。)@Ben在这方面字符串构造函数就像数字构造函数-
String(123)
给你
“123”
,而
Number(“123”)
给你
123