js数值转换的三种方法

js非数值转换为数值的三种写法分别为Number()、parseInt()、parseFloat()。

Number()是最复杂的。规则如下:

1.数值直接输出;

console.log(Number('11'));//输出11;

2.Boolean值,true转换成1,false转换成0;

console.log(Number(true));//输出1;
console.log(Number(false));//输出0;

3.null转换成0,undefined转换成NaN

console.log(Number(null));//输出0;
console.log(Number(undefined));//输出NaN;

4.字符串转换又有很多规则:

(1)字符串只包含数字,会转换成十进制,忽略前面的0,例如

console.log(Number('011'));//输出11;

(2)字符串包含有效的浮点格式,会转换成小数,同样忽略前面的0,例如

console.log(Number('000.11'));//输出0.11;

(3)字符串包含有效的十六进制格式,会转换成大小相等的十进制格式数值输出

console.log(Number('0xa'));//输出10;

(4)字符串为空,不包含任何字符,转换为0

console.log(Number(''));//输出0;

(5)除以上字符串外的字符串,转换为NaN

console.log(Number('Hello!'));//输出NaN;

Number()的转换规则确实有些复杂了。并且在某些情况下可能并不是我们想要的结果。通常我们用parseInt()来进行数值的转换。

parseInt()不会转换非数值模式的格式。它会忽略字符串前面的空格,直到找到一个非空格字符:

1.如果这个字符不是数字符号或者负号,则返回NaN

console.log(parseInt('   Hello!'));//输出NaN;

空字符串返回NaN,这一点跟Number()不同。

console.log(parseInt(' '));//输出NaN;

如果是数字符号或者负号,会继续解析第二个,直到解析完所有或者遇到非数字符号字符

console.log(parseInt('123hehe'));//输出123;

非字符后面的数字也会被忽略

console.log(parseInt('123hehe123'));//输出123;

小数点是非数字符号字符,会导致解析中止。

console.log(parseInt('12.3'));//输出12

如果第一个非空格字符是数字,parseInt()可以解析各种整数格式,包括八进制,十进制,十六进制

console.log(parseInt('070'));//es3输出56(八进制),es5输出70(十进制);
console.log(parseInt('70'));//70(十进制);
console.log(parseInt('0xa'));//10(十六进制);

可见es3和es5在解析八进制存在差异,es5已经不具备解析八进制的能力。因此我们有必要使用parseInt()的第二个参数

console.log(parseInt('070',8));//输出56;
console.log(parseInt('070',10));//输出70;
console.log(parseInt('70',8));//输出56;
console.log(parseInt('70',10));//输出70;
console.log(parseInt('0xa',16));//输出10;

如果指定16作为第二个参数,前面的0x就可以省略了,如果没指定则不能省略,否则返回NaN

console.log(parseInt('a',16));//输出10;
console.log(parseInt('a'));//输出NaN;

建议使用parseInt()任何时候都加上转换基数。

parseInt()不能转换浮点型数值,我们用parseFloat()来解决。

parseFloat()跟parseInt()差不多,同样会从第一个非空字符串开始解析,直到解析完毕,或者遇到非浮点型数值格式(区别一),但是它会忽略前面所有的0,他没有转换基数,只解析十进制的值(区别二)

console.log(parseFloat(' 123hehe'));//输出123;
console.log(parseFloat('123hehe'));//输出123;
console.log(parseFloat('01.2.3'));//输出1.2;
console.log(parseFloat('0xa'));//输出0

注意,如果字符串可以解析为整数,则小数点后面的0不会输出

console.log(parseFloat('1.000'));//输出1;
原文地址:https://www.cnblogs.com/pixelk/p/6978266.html