You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以参数调用内置对象Object构造函数会返回类数组的String对象?

问题解答

当你使用new Object('test')创建实例时,本质上是生成了一个String包装对象,而非普通的Object实例,这就是你看到类数组结构、能通过索引访问字符的核心原因。

核心逻辑:Object构造函数的特殊处理

Object构造函数会根据传入参数的类型做差异化处理:如果参数是字符串、数字、布尔这类原始类型值,它会自动调用对应原始类型的构造函数,将原始值包装成对应的对象实例:

  • 传入字符串 → 等价于调用new String(参数),生成String实例
  • 传入数字 → 等价于调用new Number(参数),生成Number实例
  • 传入布尔值 → 等价于调用new Boolean(参数),生成Boolean实例

所以你的代码let test = new Object('test')和let test = new String('test')的效果完全一致。

String对象的类数组特性

String实例本身就具备类数组的特性:

  1. 自带length属性,值对应字符串的字符长度
  2. 支持通过数字索引(从0开始)直接访问对应位置的字符
  3. 浏览器控制台会将其格式化为String{'test'}的形式,直观展示它的字符串内容与对象类型

你可以通过以下代码验证这一点:

let test = new Object('test');
console.log(test instanceof String); // 输出 true,证明是String实例
console.log(test.length); // 输出 4,对应字符串长度
console.log(test.charAt(2)); // 输出 's',和test[2]效果一致

补充说明

日常开发中除非有特殊需求(比如给字符串添加自定义属性),否则一般不需要手动创建String包装对象——直接使用原始字符串值即可,JS会在需要时自动完成原始值到包装对象的隐式转换。

内容的提问来源于stack exchange,提问作者LICON99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:43:13