应先用 trim() 去除首尾空白字符(含空格、制表符、换行符等),再用 Number() 或一元加号转数字;parseInt 需显式指定进制且会截断非法字符,易出错。

直接用 String.prototype.trim() 去掉首尾空格,再用 Number()、parseInt() 或一元加号 + 转数字即可。关键是要先 trim 再转,否则空格可能导致转换失败(如返回 NaN)。
推荐写法:trim 后用一元加号或 Number()
简洁安全,适合大多数场景:
-
const num = +str.trim();—— 一元加号,对纯数字字符串最直接 -
const num = Number(str.trim());—— 明确语义,空字符串转为0,无效字符转NaN
注意 parseInt 的坑:它不自动处理末尾空格,且会截断
parseInt 本身不忽略字符串末尾空格以外的非数字内容,而且遇到第一个非法字符就停止解析:
-
parseInt(" 42px ") → 42(只看开头,"px" 被忽略) -
parseInt(" 42.5 ") → 42(小数点算非法字符,截断) -
parseInt(" 42 ") → 42✅ 正常 - 但
parseInt(" 42 ", 10)更稳妥,显式指定进制
转数字前建议加简单校验
避免 NaN 进入后续逻辑:
立即学习“Java免费学习笔记(深入)”;
const trimmed = str.trim();const num = Number(trimmed);if (isNaN(num)) throw new Error("无效数字字符串");- 或用可选链风格:
const num = isNaN(Number(trimmed)) ? 0 : Number(trimmed);
常见错误示例
这些容易出问题:
-
Number(" 123 ") → NaN❌(没 trim,首尾空格导致失败) -
+ "123\n" → NaN❌(换行符未被去除) -
parseInt(" 0x1F ") → 0❌(没传进制,按 10 进制解析,"0x" 不合法)
不复杂但容易忽略——trim 必须在转数字之前调用,且要确保去掉所有空白字符(包括空格、制表符、换行符等)。


















