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

JavaScript中字符串函数与字符串构造函数的区别及原理问询

两种JavaScript字符串创建方式的工作原理解析

1. new String():创建字符串包装对象

当你用new关键字调用String构造函数时,返回的是一个字符串包装对象,而非原始字符串值。这个对象有几个核心特性:

  • 内部通过[[PrimitiveValue]]属性存储对应的原始字符串内容
  • 模拟数组行为:可以通过数字索引(比如strObj[0])访问单个字符,同时拥有length属性表示字符串长度
  • 继承String.prototype,能直接调用所有字符串原型方法(比如slice()、toUpperCase())

你看到的控制台输出就是这个包装对象的内部结构:

String {'ashim kandel'
0: "a"
1:"s"
2: "h"
3:"i"
4:"m"
5: " "
6: "k"
7: "a"
8: "n"
9: "d"
10: "e"
11: "l"
length: 12
[[Prototype]]: String
[[PrimitiveValue]]: "ashim kandel"
}

需要注意的是,包装对象和原始字符串的相等性判断有差异:

  • 严格相等===会返回false(因为一个是对象,一个是原始值,类型不同)
  • 宽松相等==会返回true(JavaScript会自动拆箱提取内部的原始值进行比较)

2. 直接调用String():生成原始字符串值

不使用new关键字直接调用String()时,它的本质是类型转换函数:把传入的参数转换成字符串原始值,不会创建任何对象。

对应代码:

const strPrim3 = String('ashim kandel'); // 返回原始字符串"ashim kandel"
const strObj = new String('ashim kandel'); // 返回字符串包装对象

这种方式创建的原始字符串本身不是对象,但为什么能调用toUpperCase()这类方法?因为JavaScript会在你调用方法的瞬间,临时创建一个字符串包装对象,执行方法后立刻销毁这个对象——这就是原始字符串能使用原型方法的原因。

原始字符串的相等性判断更直观:只要内容相同,严格相等===就会返回true。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:27