为何以参数调用内置对象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实例本身就具备类数组的特性:
- 自带
length属性,值对应字符串的字符长度 - 支持通过数字索引(从0开始)直接访问对应位置的字符
- 浏览器控制台会将其格式化为
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
相关产品推荐
相关产品推荐

