Number类型概述

  • Number 类型使用 IEEE 754 格式表示整数和浮点值

  • 不同数值类型有不同的数值字面量格式

  • 八进制字面量:

    1
    2
    3
    4
    5
    6
    7
    /*
    1、第一个数字必须是0,然后对应八进制数字
    2、字面量中数字超出范围就会忽略第一个0,然后当作十进制处理
    */
    let num1 = 070;//56
    let num2 = 079;//十进制79
    let num3 = 08;//十进制8
  • 十六进制字面量:

    1
    2
    3
    4
    5
    6
    /*
    1、前缀为0x且区分大小写
    2、字母大小写均可
    */
    let num1 = 0xa;//10
    let num2 = 0x1F;//31

浮点数

基础知识

  • 定义:数值中必须包含小数点,并且小数点后面必须至少有一个数字
    1
    2
    3
    let floatNum1 = 5.20;
    let floatNum2 = 13.14;
    let floatNum3 = .20;//不推荐使用
  • 存储浮点值使用的内存空间是整数值的两倍

科学计数法

  • 用于表示一个应该乘以10的给定次幂的数值
  • 表示方式:
    1
    2
    3
    let num1 = 3.125e7
    let num2 = 31250000
    console.log(num1 == num2)//true
  • ES会将小数点后至少包含6个零的浮点值转为科学计数法

精确度

  • 精确度可达17为小数
    1
    2
    console.log(0.05+0.25 == 0.15+0.15)//true
    console.log(0.1+0.2 == 0.3)//false
  • IEEE 754标准:

值的范围

  • 由于内存的限制,ES并不支持所有数值
  • 如果某个计算得到的数值结果超出了 JavaScript 可以表示的范围,那么这个数值会被自动转换为一个特殊的 Infinity
  • 无法表示的负数:-Infinity(负无穷大)
  • 无法表示的正数:Infinity(无穷大)
  • 当计算返回正/负无穷时不能再进一步用于任何计算。
  • isFinite()函数可用于检测值是不是有限大
  • Number.NEGATIVE_INFINITY和Number,POSIYIVE_INFINITY可以获取正/负无穷
    1
    2
    3
    4
    5
    let result1 = 3+5;
    console.log(inFinite(result1));//true
    ------------------
    let result2 = Number.MAX_VALUE + Number.MAX_VALUE
    console.log(inFinite(result2));//false

NaN

  • 表示不是数值
  • ES中,0,+0,-0相除会返回NaN:
    1
    2
    console.log(0/0);//NaN
    console.log(-0/+0);//NaN
  • 分母是有符号或无符号0,返回正/负无穷:
    1
    2
    console.log(512/0);//Infinity
    console.log(512/-0);//-Infinity
  • NaN不等于包括NaN在内的任何值
    1
    console.log(NaN == NaN)//false
  • isNaN()用于检测是否为NaN
    • 可接受任意数据类型
    • 任何不能转换为数值的值都会使得函数返回true
数据类型 内容 结果
字符串 可以转换为数值 false
不可以转换为数值 true
布尔值 true false
false true
数值 数字 false
NaN true

数值转换

转换函数 Number() parseInt() parseFloat()
布尔值 true → 1
false → 0
NaN NaN
数值 直接返回 返回对应整数 返回对应数值
null 返回0 NaN NaN
underfined 返回NaN NaN NaN
字符串 ①包含有(无)符号数字字符串→对应十进制数值
②包含有效浮点值→对应浮点数
③包含十六进制格式→对应十进制
④空字符串→返回0
⑤除此之外→返回NaN
①字符串最前面的空格会被忽略,从第一个非空格字符开始转换
②如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN
③如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符
①从位置 0 开始检测每个字符,解析到字符串末尾或者解析到一个无效的浮点数值字符为止
② 始终忽略字符串开头的零
③只解析十进制值
④ 如果字符串表示整数(没有小数点或者小数点后面只有一个零),则返回整数
对象 调用valueOf()方法,并按上述规则返回值;如果转换结果为NaN,则调用toString()方法,再按照字符串规则转换 NaN NaN
  • parseInt(str,base)有两个参数:
    • str:接受一个带转化的字符串
    • base:为一个数值,表示进制