在 JavaScript 中,string
和 String
有本质的区别,分别代表 基本类型 和 对象类型。
1. string
(小写 s)
- 基本数据类型(primitive type)。
- 表示文本数据的原始值。
- 直接用引号(
''
或""
或 ``)定义。 - 没有构造函数,不具有对象的特性。
示例:
const str = "Hello, World!"; // 使用 string
console.log(typeof str); // 输出: "string"
特点:
string
是不可变的,修改会创建新的字符串。string
可以访问原型上的方法(例如toUpperCase()
),因为 JavaScript 会临时用String
包装它。
2. String
(大写 S)
- 构造函数对象,用于创建字符串对象。
- 是 JavaScript 的内置对象,允许对字符串进行包装。
- 用
new String()
创建的是一个对象类型,而不是原始值。
示例:
const strObj = new String("Hello, World!"); // 使用 String 构造函数
console.log(typeof strObj); // 输出: "object"
console.log(strObj instanceof String); // 输出: true
区别总结
特性 | string | String |
---|---|---|
类型 | 基本类型(primitive ) | 对象类型(object ) |
使用方式 | 引号("" ,'' ,````)直接创建 | new String() 或 String() |
内存效率 | 高效,直接存储原始值 | 低效,存储更多对象属性 |
方法访问 | 通过临时包装调用 String 的方法 | 直接调用对象上的方法 |
是否可变 | 不可变,操作会生成新字符串 | 可变,具有对象特性 |
类型检测 | typeof str === "string" | typeof strObj === "object" |
示例 | const str = "abc"; | const strObj = new String("abc"); |
注意事项
-
优先使用
string
:string
是基本类型,内存效率更高,性能更优。- 大多数场景下,
string
完全满足需求。
-
避免使用
new String()
:- 除非明确需要创建字符串对象(几乎很少用到)。
- 字符串对象在比较时可能导致意外结果:
const str1 = "abc"; const str2 = new String("abc");console.log(str1 === str2); // 输出: false (类型不同) console.log(str1 == str2); // 输出: true (值相等)
最佳实践
- 直接使用原始字符串值(
string
)。 - 用
String()
函数将其他类型转为字符串:const num = 123; const str = String(num); // 输出: "123" console.log(typeof str); // 输出: "string"
总结
string
是原始值,String
是对象类型。大部分情况下,建议使用 string
,更简单、更高效。