JavaScript知识点回顾(四)——数据类型(二)

这是我参与8月更文挑战的第四天,活动详情查看:8月更文挑战

数据类型

ECMAScript有六种简单数据类型:Number,String,Boolean,Null,Undefined和Symbol。其中Symbol是ES6新增的。

Number类型

Number类型使用IEEE754格式表示整数和浮点值。由于存储浮点值的内存空间是存储整数值的两倍,所以ECMAScirpt总是尽可能的把值转换为整数进行处理

1.浮点值

    let floatNum1 = 0.8;
    let floatNum2 = 1.8;
    let floatNum3 = .8;//有效,但不推荐
复制代码

关于浮点数,有一道非常经典的面试题,就是在js中0.1+0.2==0.3是否成立?
答案是不成立的。因为使用IEEE754数值,所以在浮点数的计算上,存在失去精度的现象,所以永远不要测试某个特定的浮点值,要尽可能的转换为整数进行计算。

2.值的范围

如果计算的数值结果超过了js可以表示的范围,那么这个数值将会自动转换成一个特殊的Infinity值。任何无法表示的负值以-Infinity表示,任何无法表示的正值以Infinity表示。要确定一个值是不是有限大,可以使用函数isFinite()进行判断。

3.NaN

有一个特殊的数值NaN,意思是“不是数值”(Not a Number),用于表示本来要返回数值的操作失败了。例如:

    console.log(0/0);//这里会打印NaN
复制代码

NaN有几个独特的特性。首先NaN不等于自身。其次,任何涉及NaN的操作都会返回NaN。因此,存在一个函数isNaN()。该函数接收一个参数,并且会尝试将这个参数转换为数值,如果可以转换为数值,那么返回false,如果不能转换为数值,那么返回true。

4.数值转换

有三个函数可以将非数值转换为数值:Number(),parseInt(),parseFloat()。Number()是转型函数,可以用于任何数据类型。而parseInt()和parseFloat()主要用于将字符串转为数值。

对于Number()函数,有着以下的转型规则:

  • Boolean类型:true返回1,false返回0;
  • Number类型:直接返回;
  • Null类型:返回0;
  • Undefined类型:返回NaN;
  • String类型:空字符串返回0;含数值字符串会返回十进制的数值;其他情况返回NaN
  • Object类型:先调用valueof()方法,然后照上面的规则返回,如果是NaN,那么调用toString()方法,再按照字符串规则转换。

parseInt()函数则更关注于字符串是否包含数值模式。如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。如果不是,那么立即返回NaN。
并且它可以接受第二个参数,用于指定底数(进制数),
例如:

    console.log(parseInt("2021juejin"));  //2021
    console.log(parseInt(""));            //NaN
    console.log(parseInt("0XA"));         //10,十六进制整数
    console.log(parseInt("20.21juejin")); //20
    console.log(parseInt("2021"));        //2021
    console.log(parseInt("AB"16));      //171
    console.log(parseInt("AB"));          //NaN
    console.log(parseInt("10",2));        //2
    console.log(parseInt("10",8));        //8
    console.log(parseInt("10",10));       //10
    console.log(parseInt("10",16));       //16  
复制代码

parseFloat()函数会始终忽略字符串开头的0,并且解析到字符串末尾或者一个无效的浮点数值字符为止。并且parseFloat()函数只接受一个参数,只按照十进制进行解析。例如:

    console.log(parseFloat("2021juejin"));  //2021
    console.log(parseFloat(""));            //NaN
    console.log(parseFloat("0XA"));         //0
    console.log(parseFloat("20.21.juejin"));//20.21
    console.log(parseFloat("0.2.1"));       //0.2
    console.log(parseFloat("AB"));          //NaN
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享