不少时候,咱们的数字是字符串的形式的,如:'1', '3', ['2', '4'],它们多是从输入框<input /> 中获取,多是来自后端的接口。咱们有义务把他们变成整型。下面介绍几种方案es6
这是es3就有的语法了,用法:后端
parseInt('123'); // 123 => number
js版本发展到es6的时候,parseInt被移到Number中。固然了,原来的parseInt能够继续使用数组
Number.parseInt('123'); // 123 => number
加入数字中带有非数字的字符,那么第一个出现非法字符的地方将会被截断code
Number.parseInt('1239y93p21'); // 1239 => number
和parseInt差很少,但parseFloat主要针对浮点数的转换接口
parseFloat('123'); // 123 => number Number.parseFloat('123'); // 123 => number Number.parseFloat('123.4'); // 123.4 => number
一样有截断非法字符的规则字符串
Number.parseInt('1239.34y93p21'); // 1239.34 => number Number.parseInt('12 39.34y93p21'); // 12 => number
es6新出的接口,能够直接使用,而且对浮点数也是有效的input
Number('123'); // 123 => number Number('123.4'); // 123.4 => number
与parse*()不一样,Number处理时,遇到非法字符,直接NaN了,注意:NaN的类型也是number。string
Number('123b'); // NaN => number Number('123.4b'); // NaN => number
是的,直接乘以1就好了class
'123' * 1; // 123 => number '123.4' * 1; // 123.4 => number ‘123’ - 0; // 1234 => number '123.4' - 0; // 123.4 => number
遇到非法字符,也是直接NaN了。map
'123b' * 1; // NaN => number
注意:加法是不能转换类型的呢,会被当成字符串拼接:
'123' + 0; // ’1230‘ => string
这就是二进制方面的处理了,可是只能处理整数。遇到浮点数时,小数部分被丢弃。遇到非法字符,直接被转换成0。由于按位或会将数字转换成带符号的32位整数
,多余的位数会被直接丢弃;因此按位或支持的整数范围是[pow(-2, 31), pow(2, 31) - 1]
'123' | 0; // 123 => number '123.4' | 0; // 123 => number '123rd' | 0; // 0 => number a = Math.pow(2, 31) // 2147483648 <=> 10000000000000000000000000000000 a | 0 // -2147483648 => number (a - 1) | 0 // 2147483647 => number
为何整数转为负数了呢,由于带符号二进制中,最高位(第32)是1,表明负数
对于字符串数组的转换,能够利用Number的特性
['1', '2', '3'].map(Number) // [1, 2, 3] => number[]
还有其余的吗?若是有补充欢迎留言。