Number() 严格解析整个字符串,失败返回 NaN;一元正号 + 依赖 ToNumber 规则,支持布尔值、空数组等更宽泛转换,但可能掩盖错误。

Number() 和一元正号 + 都能将其他类型转为数字,但行为细节不同,选错可能引发隐式转换陷阱。
Number():严格按规则解析,失败返回 NaN
它会尝试把整个输入当作数值字面量来解析。遇到无法识别的字符(非开头的空白或符号外)就直接返回 NaN。
- "123" → 123
- " 45.6 " → 45.6(自动忽略首尾空格)
- "12px" → NaN("px" 不是数值部分)
- "" → 0(空字符串被定义为 0)
- " " → 0(纯空格也得 0)
- null → 0,undefined → NaN
一元正号 +:更“激进”的强制转换,依赖 ToNumber 抽象操作
它不解析字符串结构,而是调用 JavaScript 内部的 ToNumber 规则,对很多值更宽容。
- +"123" → 123
- +" 45.6 " → 45.6(同样忽略首尾空格)
- +"12px" → NaN(和 Number() 一样)
- +"" → 0,+" " → 0
- +null → 0,+undefined → NaN
- +true → 1,+false → 0(Boolean 转换明确)
- +[] → 0(空数组先转空字符串,再转 0)
- +[1,2] → NaN([1,2] → "1,2" → NaN)
什么时候用哪个?看意图和容错需求
如果要校验输入是否合法数值(比如表单数字字段),优先用 Number() —— 它对格式敏感,NaN 就是明确的“不合格”信号。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
如果只是快速取值、且上下文允许宽松转换(如计算前统一转数),+ 更简短,但要注意副作用,比如 +[] 得 0 可能掩盖逻辑错误。
- 表单输入:Number(input.value) 更安全,可配合 isNaN() 判断有效性
- 函数参数默认值:+(val || "0") 比 Number(val || "0") 少两个字符,语义相近
- 避免坑:+"0x10" → 16(识别十六进制),Number("0x10") → 0(只认十进制)
注意:它们都不能替代 parseInt/parseFloat
Number() 和 + 都是“全量转换”,不支持进制或截断。想取字符串开头的整数(如 "123abc" → 123),必须用 parseInt(str, 10);想提取浮点数(如 "3.14px" → 3.14),得用 parseFloat(str)。

















