JavaScript中String()与new String()的区别是什么?
JavaScript中String()和new String()的区别
嘿,这个问题问得特别到位!很多刚上手JavaScript的开发者都会被这两种写法搞懵,我来给你拆解清楚核心差异:
1. 返回值的类型完全不同
- 当你调用
String('word')时,它返回的是原始字符串类型(string primitive)——这就是我们日常开发中最常用的字符串值。用typeof验证一下就明白:console.log(typeof String('word')); // 输出: 'string' - 而
new String('word')会创建并返回一个String包装对象(String object),它是一个包含原始字符串的对象实例。同样用typeof看:console.log(typeof new String('word')); // 输出: 'object'
2. 实际行为的差异
- 自动包装 vs 永久对象:原始字符串在调用方法(比如
length、slice)时,JavaScript会临时把它包装成String对象,执行完方法后这个临时对象就会被销毁;但new String()创建的是一个持久的对象,会一直存在内存中。 - 比较逻辑不同:
- 用宽松相等
==比较时,因为JS会做类型转换,所以String('word') == new String('word')会返回true; - 但用严格相等
===比较时,因为类型不同(一个是string,一个是object),结果会是false:console.log(String('word') === new String('word')); // 输出: false
- 用宽松相等
- 属性存储差异:你可以给String对象添加自定义属性并保留,但原始字符串做不到:
// String对象可以存属性 const strObj = new String('word'); strObj.customProp = 'hello'; console.log(strObj.customProp); // 输出: 'hello' // 原始字符串无法保留自定义属性 const strPrim = String('word'); strPrim.customProp = 'hello'; console.log(strPrim.customProp); // 输出: undefined
为啥示例里输出看起来一样?
当你把String对象传给console.log时,它会自动调用对象的toString()方法,把内部的原始字符串打印出来,所以视觉上和原始字符串的输出没区别,但它们的本质完全不同哦!
内容的提问来源于stack exchange,提问作者cham
相关产品推荐
相关产品推荐

