JS 的字符串如何分配内存?JS 中的字符串存在字符串常量池中,被栈或堆上的变量引用。如果变量的值是字符串字面量,则在栈上的变量直接引用字符串常量池中的字符串;如果是字符串是 new String 创建的,则会在堆上创建 String 对象,指向字符串常量池中的字符串,栈上变量指向堆中的 String 对象。我们通过 Chrome Devtools 的 Memory 工具来验证字符串的内存分配方式。我们准备了两段代码,分别创建数组 arr 和 arr2。数组 arr 包含 10000 个字符串常量 "guang";数组 arr2 包含 10000 个 new String("guang") 创建的字符串。理论分析后,我们用 Memory 工具进行验证。通过 Memory 工具的时间线分析,我们看到在创建数组 arr 和 arr2 的时间点,创建了 string 和 array 两种对象。"guang" 字符串在常量池中,数组元素直接指向常量池中的字符串。新创建的 String 对象在堆上分配,然后指向常量池中的字符串。这验证了字符串常量池的存在以及字符串字面量和 new String 创建字符串的内存分配方式。我们得出字符串存储在字符串常量池中,字符串字面量直接指向常量池的字符串地址,String 对象在堆上分配内存,然后指向字符串常量池的字符串地址。使用字符串字面量方式创建字符串可以节省内存。我们使用 Chrome Devtools Memory 工具证明了字符串的内存分配方式,并强调了字符串常量池的好处和使用字符串字面量的优势。这个过程直观展示了两种创建字符串方式在内存占用上的差异,对实际开发有重要参考价值。