优先用 parseint(str, 10) 处理整数,parsefloat 处理小数,number 或 +str 严格校验全字符串合法;需清洗逗号、空格,避免 parseint 误解析科学计数法,取整应先转数字再用 math 方法。

选哪种方法,关键看你要处理的字符串长什么样、要什么结果——不是越短越好,也不是越“高级”越准,而是匹配场景才靠谱。
明确目标:要整数还是小数?
如果只要整数(比如用户输入的年龄、ID、页码),优先用 parseInt(str, 10),并**必须指定基数 10**。不写 10 容易把 "08" 当八进制、"0x1F" 当十六进制,导致结果出人意料。
如果可能含小数(比如价格、评分、坐标),用 parseFloat(str)。它能正确解析 "3.14"、"0.5"、"1e2",也支持开头带空格或正负号,但遇到第一个非法字符就停,比如 "123.45px" → 123.45。
若不确定格式但要求“全字符串必须合法”,比如校验 API 返回的纯数字字段,就用 Number(str) 或 +str。它们要么返回完整数字,要么直接 NaN —— 比如 "123abc"、" 42 "(带空格可转)、"12,345"(含逗号则失败)都会被严格拒绝。
警惕常见陷阱字符串
这些情况容易踩坑,得提前判断或清洗:
- 带千分位逗号:如 "1,234.56" → 先用
str.replace(/,/g, '')去掉再转 - 前后有空格或换行:所有方法大多能自动忽略首尾空白,但保险起见可用
str.trim() - 空字符串或仅空格:Number("") → 0,parseInt("") → NaN,行为不一致,需统一处理
- 科学计数法字符串:如 "1.23e+3" → Number 和 parseFloat 都支持,parseInt 不支持
需要取整时别硬套 parseInt
别为了“取整”就默认用 parseInt —— 它是按字符解析,不是数学取整。比如:
- "3.9" → parseInt → 3(看起来对,但只是巧合)
- "-3.9" → parseInt → -3(仍是截断,不是 floor)
- "3.14159" → 要保留两位小数?该用
Number(str).toFixed(2),不是 parseInt
真要四舍五入、向下取整或向上取整,先用 Number 或 + 转成数字,再套 Math.round / Math.floor / Math.ceil。
性能和可读性其实不用太纠结
一元加号 +str 和 Number(str) 性能几乎一样,都比 parseInt/parseFloat 略快;但可读性上,+str 太隐晦,团队协作时容易被误读为拼接,推荐明确写 Number(str)。
除非在性能敏感的循环里(比如处理上万条数据),否则选最清晰表达意图的那个:要整数→parseInt(..., 10),要浮点→parseFloat,要全量校验→Number。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











