最可靠方式是 parseInt(str, 10),强制十进制解析、忽略开头空格、遇非法字符停止;+str 和 Number(str) 要求全字符串有效,且 Number("") 返回 0 而非 NaN,需注意取整和边界陷阱。

字符串转整数在 JavaScript 中最常用、最可靠的方式是使用 parseInt() 函数,配合明确的进制参数;而 Number() 和一元加号 + 也能实现,但行为略有不同,需注意隐式转换带来的意外结果。
推荐方式:parseInt(str, 10)
这是处理字符串转整数最稳妥的方法,尤其适合从用户输入、DOM 文本或配置中提取数字时使用。
-
第二个参数必须写 10,强制按十进制解析,避免以 "0" 开头的字符串被误认为八进制(如
parseInt("012")在旧环境可能返回 10) - 它会忽略开头空格,并从左到右解析直到遇到非法字符为止,例如:
parseInt(" 42px", 10)→42,parseInt("abc42", 10)→NaN - 如果字符串完全不包含有效数字(如空串、纯字母),返回
NaN,建议用isNaN()或Number.isNaN()检查
简洁方式:+str 或 Number(str)
这两种方式会尝试将整个字符串“完全”转为数字,任何非数字内容(包括尾部单位、空格)都会导致结果为 NaN。
-
+"42"和Number("42")都返回42 -
+"42px"→NaN,Number(" 42 ")→42(自动去首尾空格),但Number("42.5")→42.5(不是整数!) - 它们对空字符串、仅空格返回
0(Number("") === 0),这点和parseInt("", 10)返回NaN不同,容易引发 bug
需要整数结果?别忘了取整
如果原始字符串含小数(如 "3.14"),parseInt() 默认截断小数部分,而 Number() 和 + 会保留小数。若你明确要整数,可额外使用:
立即学习“Java免费学习笔记(深入)”;
-
Math.floor()(向下取整)、Math.ceil()(向上)、Math.round()(四舍五入) - 更安全的整数转换组合:
Math.trunc(Number(str))或parseInt(str, 10)—— 后者更直观且无需嵌套
常见陷阱提醒
避免这些易错写法:
-
parseInt("0x1A")不写进制参数 → 可能被识别为十六进制,返回26;加, 10就返回0(因为 "0x1A" 十进制下第一个字符 "0" 合法,但 "x" 非法,所以只取 "0") -
+" 42 "→42(可接受),但+"42 "→42,而+"42 abc"→NaN - 不要依赖
~~str或str | 0,它们是位运算,只适用于 32 位有符号整数范围(-2147483648 ~ 2147483647),超出会出错


















