原始类型性能最优,因直接存栈且无GC压力;应避免装箱、用字面量而非包装对象;数字转字符串优先""+n;严格相等用===;循环中减少重复装箱。

原始类型(string、number、boolean、null、undefined、symbol、bigint)在 JavaScript 中性能最优,因为它们直接存储在栈中,不涉及对象引用和 GC 压力。在密集计算场景下,避免隐式或显式装箱、类型转换,能显著降低开销、提升吞吐量。
优先使用字面量,避开包装对象
不要用 new String()、new Number() 或 new Boolean() 创建包装对象——它们是真实对象,占用更多内存,且每次调用方法都要经历拆箱过程。
- ✅ 推荐:
const str = "hello"; const num = 42; - ❌ 避免:
const str = new String("hello"); const num = new Number(42);
数字转字符串:选最快路径
高频拼接或日志输出中,数字转字符串的写法影响明显。实测性能排序为:"" + n > String(n) > n.toString() > new String(n)。
-
"" + 123:引擎有专门优化路径,无函数调用开销 -
n.toString(10)可读性好,但需走方法查找+执行流程;若 n 是变量且可能为 null/undefined,还需提前判空 - 避免
String(n)在循环中反复调用——它虽比toString()略快,但仍不如字符串拼接直接
比较操作用严格相等
用 === 替代 ==,跳过运行时类型转换逻辑。尤其在数组遍历、状态判断、哈希匹配等密集分支中,省去类型推断可减少 V8 的预测失败惩罚。
- 例如:
if (status === 200)比if (status == "200")更快更确定 - 对布尔判断,直接用
if (flag)或if (!flag),而非if (flag === true)(除非 flag 可能是其他真值)
避免循环中重复装箱
原始值在调用方法时会临时包装(如 num.toFixed() 或 str.toUpperCase()),若在大循环中频繁触发,会制造大量短生命周期对象,加重 GC 压力。
- ❌ 危险写法:
arr.forEach(n => n.toString().padStart(4, "0"))——每个n都被装箱再拆箱 - ✅ 改进:
arr.forEach(String).map(s => s.padStart(4, "0")),或更优:先转字符串再处理,减少中间对象 - 对纯数值运算,尽量保持原始类型流转,推迟格式化到展示层



















