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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:24:33