Number()、parseInt()、ParseFloat()数值类型的转换

258 阅读3分钟

最近在看js的基础知识,温故而知新,发现了一些有意思的东西,在此记录一下,分享给共同学习进步的伙伴们。
number()、parseInt()、parseFloat()函数都可以对非数值类型进行转化为数值类型,那么它们有什么不同的地方呢?

简单的来说Number()可以将任意类型转化成数值类型,而 parseInt() 和 parseFloat() 主要是将字符串类型转化为数值类型。

Number() 函数

Number函数转化的规则如下

类型规则
布尔 true 则转化为1, false 则转化为 0
数值 直接返回
null 0
undefined NaN
字符串 1. 如果字符串包含数值字符,包括数值前面带有‘+’或者‘-’的情况,则转化为一个的数值十进制 2. 如果字符串包含有效的浮点值格式,例如:‘0.1’则会转化为相应的浮点值
3. 如果字符串包含有效的十六进制格式,例如:‘0xf’,则会转化为该十六进制对应的十进制整数 4. 如果是空字符,则返回0
5. 如果字符串包含上述情况以外的情况,则返回NaN
对象 调用valueOf()方法,然后按照上面的规则进行转化,如果返回的是NaN,则调用toString()方法,然后再按照转化字符串的规则进行转化

parseInt() 函数

Number()转化字符串优点复杂,有一点反常规,通常在需要得到整数时可以优先使用parseInt()函数更专注于包含数值模式。首先字符串最前面的空格会被忽略,从非空格字符开始转化。

如果第一个字符串不是数值、加号、减号,则立即返回NaN;
如果第一个字符串是数值、加号或减号,则会依次检测每一个字符,知道字符串末尾,或则碰到非数值字符,比如‘111a’,会返回111。

另外parseInt()函数也会识别不同进制的数值

parseInt("111a"); // 111
parseInt("");     // NaN
parseInt(1.2);    // 1
parseInt("10");   // 10
parseInt("0xA");  // 10, 十六进制

parseInt()对于不同的数值格式容易混淆,所以parseInt()可以传入第二个参数,用于指定进制。例如,我们要将数值解析为十六进制,那么传入16作为第二个参数即可

parseInt("0xAF", 16);  //175 

如果传入了第二个参数,那么字符串前面的‘0x’是可以省略的

parseInt('AF', 16);   // 175
parseInt('AF');       // NaN

parseFloat()函数

parseFloat() 是将字符串中的数值转换为小数。parseFloat() 的工作方式与 parseInt() 类似,都是从最开始的地方到字符串末尾进行解析,如果解析到一个无效的浮点数值为止;
不同的地方在于,它会忽略开头的0,parseFloat()只解析十进制的数值,如果表示整数或者小数点后面只有0,那么parseFloat()返回的就是一个整数