空字符串""显式转数字结果为0;number("")、number(" ")均返回0,而parseint("")和parsefloat("")返回nan;安全转换应显式判断str === "" ? 0 : number(str)。

空字符串 "" 在 JavaScript 显式转换为数字时,结果是 0。
Number("") 返回 0
Number 构造函数或函数形式执行显式转换时,会按规范将空字符串视作“可解析的数字字面量”,等价于 "0" 的解析逻辑(但不是真的变成 "0"),最终返回数值 0:
-
Number("") === 0→ true -
Number(" ") === 0→ true(只含空白字符也一样) -
Number("0") === 0→ true -
Number("1") === 1→ true
parseInt("") 和 parseFloat("") 的行为不同
这两个函数属于“解析”而非严格“类型转换”,遇到空字符串时返回 NaN:
-
parseInt("")→ NaN -
parseFloat("")→ NaN - 原因:它们从左到右扫描,找不到任何有效数字字符,直接终止并返回 NaN
如何安全地把空字符串转为 0 或其他默认值
如果业务中希望空字符串代表“无输入”,应避免依赖 Number("") 的隐含语义。推荐显式判断:
- 用逻辑运算符:
Number(str) || 0—— 但注意:这会让"0"、"0.0"也被转成 0 后被||覆盖为 0,不严谨 - 更稳妥:
str === "" ? 0 : Number(str) - 或使用空值合并:
Number(str) ?? 0—— 不起作用,因为Number("")是 0(非 null/undefined),不会触发 ?? - 推荐封装:
function toNumber(str) { return str === "" ? 0 : Number(str); }
为什么 Number("") 是 0?这是设计还是缺陷
这是 ECMAScript 规范明确规定的(ToNumber Applied to the String Type):
- 空字符串和仅含空白字符的字符串,被定义为“空数值字面量”,映射为 +0
- 该规则与
+" "、+""等一元加号行为一致 - 它不是 bug,而是为了兼容早期 JS 行为,但容易引发误判,需开发者主动识别
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











