JavaScript中临时内存分配为何比显式创建String对象更快?
为什么优先用字符串基本类型而非String对象?
首先明确:临时创建的包装对象开销真的可以忽略,相比String对象的常驻内存负担,基本类型还是划算得多,原因有这几点:
内存成本差太多:String对象是完整的JS对象,除了存字符串本身,还要附带原型链、内部属性这些额外开销;而字符串基本类型就是纯原始值,内存占用小一大截。哪怕调用方法时临时生成包装对象,用完就会被垃圾回收,不会长期占着内存;但String对象只要没被回收,就一直带着那些额外开销。
引擎早就把优化做透了:现代JS引擎(比如Chrome的V8)对这种临时包装对象有专门优化,很多时候根本不会真的创建完整的对象实例,而是直接在原始值上执行方法逻辑,相当于跳过了对象创建的步骤,开销几乎为0。
能避免莫名其妙的bug:String对象是引用类型,和基本类型的字符串在比较时会出问题,比如
new String('test') === 'test'会返回false,因为一个是对象引用,一个是原始值,这种坑很容易让逻辑出错,用基本类型就没这烦恼。
内容的提问来源于stack exchange,提问作者Satvinder pal singh
相关产品推荐
相关产品推荐

