number() 是 javascript 中最直接的显式数字转换函数,按规则将任意值转为数字:字符串依格式解析(非法开头返回 nan),布尔值/undefined/null 有固定映射,对象先转原始值再转换,symbol 抛错;使用时需配合 number.isnan() 验证结果。

Number() 是 JavaScript 中最直接的显式数字转换函数,它会尝试把任意值转成数字,规则清晰、行为可预测,适合需要明确控制类型转换的场景。
字符串转数字:按格式解析,失败返回 NaN
字符串是 Number() 最常处理的类型。它会忽略首尾空格,按数字字面量规则解析:
-
纯数字字符串(如
"123"、"-45.6"、"0x1A"十六进制)→ 转为对应数字 -
空字符串或只含空白(
""、"\t \n")→ 返回0 -
含非法字符的字符串(
"123abc"、" 45px ")→ 只要开头不能构成有效数字 → 返回NaN -
科学计数法字符串(
"1e3"、"-2.5e-2")→ 正确解析为1000、-0.025
布尔值、null、undefined 的固定映射
这些原始值的转换结果是固定的,无需记忆例外:
-
Number(true)→1 -
Number(false)→0 -
Number(null)→0(注意:不是 NaN) -
Number(undefined)→NaN
对象和 Symbol:先转原始值再转换
对对象(包括数组、日期、普通对象),Number() 会先调用其 [Symbol.toPrimitive]('number') 方法;若无,则依次尝试 valueOf() 和 toString(),取第一个返回原始值的方法结果,再对那个结果调用 Number:
-
Number([1, 2])→ 先[1,2].toString()得"1,2"→ 再Number("1,2")→NaN -
Number([42])→"42"→42 -
Number(new Date("2023-01-01"))→valueOf()返回时间戳(毫秒数)→ 成功转为数字 -
Number(Symbol("a"))→ Symbol 无法转为数字 → 抛出TypeError
实用建议:安全转换与常见陷阱
实际使用中要注意判断结果是否有效:
- 用
Number(value)后,配合isNaN()或Number.isNaN()检查是否转换失败(Number.isNaN()更推荐,不强制转换) - 避免依赖隐式转换,比如
+"123"虽等价,但可读性差;parseInt()或parseFloat()更适合截断式解析(如提取 "123px" 中的 123) - 空数组
[]→Number([])是0;单元素数组[0]→0;但[0, 1]→NaN—— 这些行为容易误判,建议对数组先做预处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











