Number()是最严格的字符串转数字方式,要求整个字符串为合法数字格式,否则返回NaN;空字符串或纯空格返回0,支持科学计数法和十六进制,不截断解析。

使用 Number() 函数进行显式转换,是将字符串转为数字最直接的方式之一。它会尝试把整个字符串解析成一个有效的数字,成功返回对应数值,失败则返回 NaN。
Number() 转换的基本规则
它对字符串的处理比较严格:必须是“纯数字格式”或带正负号、小数点、科学计数法的合法数字字符串,否则一律返回 NaN。
- "123" → 123
- "-45.6" → -45.6
- " 789 " → 789(自动忽略首尾空格)
- "12.34.56" → NaN(多个小数点不合法)
- "123abc" → NaN(不能容忍任何非数字字符,哪怕开头是数字)
- "" 或 " " → 0(空字符串或全空格转为 0)
和 parseInt()、parseFloat() 的关键区别
Number() 不像 parseInt() 那样会“截断”字符串,也不像 parseFloat() 那样只取开头有效部分。它要求整个字符串都得是合法数字表示:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- Number("123px") → NaN(而 parseInt("123px") 是 123)
- Number("1e2") → 100(支持科学计数法,parseInt("1e2") 却是 1)
- Number("0x1F") → 31(支持十六进制字面量,但注意:仅限带 0x 前缀的标准写法)
实际使用建议
适合用于你**完全信任输入格式**的场景,比如表单中用户输入的纯数字字段、JSON 解析后的字符串值等。使用前建议配合 isNaN() 做校验:
立即学习“Java免费学习笔记(深入)”;
const num = Number(input); if (!isNaN(num) && isFinite(num)) { /* 安全使用 */ }- 避免直接用 == 或 === 和 NaN 比较(因为 NaN !== NaN),始终用 isNaN() 判断
- 若需宽松解析(如允许单位、前缀杂字符),应改用 parseInt() 或正则提取后再用 Number()
常见易错点提醒
别被看似“能转”的字符串误导:
- Number(" ") 是 0,不是 NaN;但 Number(" ")(全角空格)是 NaN
- Number("1_000")(带下划线分隔符)是 NaN(ES2021 支持数字字面量中的 _,但 Number() 不识别)
- Number("true") → NaN,Number("false") → NaN(布尔字符串不适用,要用 Boolean() + 算术运算或三元判断)

















