解决方案
isNaN()
无论变量内容是字符串还是数字,这都有效。
isNaN(num) // 返回true,如果该变量没有包含数字
例子
isNaN(123) // false
isNaN('123') // false
isNaN('1e10000') // false (该字符串所表示的数字超出了精度范围,代表正无穷, 所以它是数字)
isNaN('foo') // true
isNaN('10px') // true
当然,如果需要,你可以反过来使用:
function isNumeric(num){
return !isNaN(num)
}
一元运算符+
仅在字符串包含数字字符时才有效,否则返回NaN
。
+num // 返回字符串中的数字值,当字符串不是一个纯粹的数字,则返回NaN
例子
+'12' // 12
+'12.' // 12
+'12..' // Nan
+'.12' // 0.12
+'..12' // Nan
+'foo' // NaN
+'12px' // NaN
parseInt会尽可能地将字符串转换为数字
用于将’12px’转换为12,例如:
parseInt(num) // 从字符串的开头抽取出数字,否则返回NaN
例子
parseInt('12') // 12
parseInt('aaa') // NaN
parseInt('12px') // 12
parseInt('foo2') // NaN
parseInt('12a5') // 12
浮点数
记住,与+num
不同的是,parseInt
(顾名思义)将一个浮点数转换为整数通过斩去小数点后面所有的值:
+'12.345' // 12.345
parseInt(12.345) // 12
parseInt('12.345') // 12
空字符串
空字符串可能有点特殊。+num
将空字符串转换为零,并且isNaN()
也把它当做数字:
+'' // 0
isNaN('') // false
然而parseInt()
结果与之相反:
parseInt('') // NaN