Number

数值字面量

  • 最基本的数值字面量格式是十进制整数;

  • 整数还可以通过八进制或十六进制的字面值来表示;八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析;

  • var octalNum1 = 070; // 八进制的 56
    var octalNum2 = 079; // 无效的八进制数值——解析为 79
    var octalNum3 = 08; // 无效的八进制数值——解析为 8
  • e 表示法,10的指数次幂,3.125e3 表示 3.125*10^33.125e-3 表示 3.125*10^-3

  • 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数,浮点计算的误差是使用基于 IEEE754 数值的浮点计算的通病,永远不要测试某个特定的浮点数值;

数值范围

  • ECMAScript 能够表示的最小数值保 存在 Number.MIN_VALUE 中—在大多数浏览器中,这个值是 5e-324

  • 能够表示的最大数值保存在 Number.MAX_VALUE 中—在大多数浏览器中,该值是1.7976931348623157e+308

  • 超出数值范围的值,将被自动转换成特殊的 Infinity 值。负数会被转换成 -Infinity (负无穷),正数则会被转换成 Infinity (正无穷),Infinity 不能够参与计算;

  • Number.NEGATIVE_INFINITYNumber.POSITIVE_INFINITY 分别保存 -InfinityInfinity

  • 正数除以 0 返回 Infinity,负数除以 0 返回 -Infinity

  • isFinite() 函数,检验参数是否位于最小与最大数值之间,返回 true/false

  • 监测和监控极大或极小数值的必要性;

NaN

  • NaN 的特殊性,用于表示一个本来要返回数值的操作数未返回数值的情况;

  • 任何涉及 NaN 的操作(例如 NaN/10 )都会返回 NaN

  • NaN 与任何值都不相等,包括 NaN 本身,NaN == NaN; // false

  • 0 除以 0 才会返回 NaN

  • typeof NaN; 返回 "number"

  • isNaN() 函数,接受一个参数,确定这个参数是否“不是数值”。isNaN() 在接收到一个值之后,会将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串 "10"Boolean 值。而任何不能被转换为数值的值都会导致这个函数返回 true

数值转换

  • Number(),用于任何数据类型,一元加操作符的操作与 Number() 函数相同,转换规则如下:

    数据类型

    Number()结果

    Boolean

    0 或 1

    Null

    0

    Undefined

    NaN

    Number

    简单的传入和返回

    String

    空字符串,则将其转换为 0; 只包含数字,则将其转换为十进制数值,忽略前导0; 包含有效的浮点格式,则转换为对应的浮点数值; 包含有效的十六进制格式,则转换为十进制整 数值; 包含除上述格式之外的字符,则转换为 NaN

    Object

    调用 valueOf() 方法,依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用 toString() 方法,然后再次依照前面的规则转换返回的字符串值

  • Number({}); // NaN
    Number([]); // 0
    Number([2]); // 2
    Number([2,3]); // NaN
  • parseInt(),string => number(整数),会忽略前面的空直至找到第一个非空格字符,Number() 函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是 parseInt() 函数,转换规则如下:

    数据类型

    parseInt()结果

    String

    空字符串,则将其转换为 NaN; 第一个字符不是数字字符或者负号,转换为 NaN; 如果第一个字符是数字字符,会继续向后解析直到结束或遇见非数字字符 以"0x"开头且后跟数字字符,就会将其当作一个十六进制整数; 以"0"开头且后跟数字字符,则会将其当作一个八进制数;

  • var num1 = parseInt("1234blue");  // 1234
    var num2 = parseInt("");  // NaN
    var num3 = parseInt("0xA"); // 10(十六进制数)
    var num4 = parseInt(22.5); // 22
    var num5 = parseInt("070"); // 56(八进制数)
    var num6 = parseInt("70"); // 70(十进制数) 
    var num7 = parseInt("0xf"); // 15(十六进制数)
    
    var num1 = parseInt("10", 2); //2 (按二进制解析) 
    var num2 = parseInt("10", 8); //8 (按八进制解析)
    var num3 = parseInt("10", 10); //10 (按十进制解析)
    var num4 = parseInt("10", 16); //16 (按十六进制解析)
  • parseFloat(),string => number(浮点数),与 parseInt() 函数类似,但只解析十进制值,规则如下:

    数据类型

    parseInt()结果

    String

    空字符串,则将其转换为 NaN; 第一个字符不是数字字符或者负号,转换为 NaN; 如果第一个字符是数字字符,会继续向后解析直到结束或遇见非数字字符 十六进制格式的字符串则始终会被转换成 0; 如果字符串包含的是一个可解析为整数的数parseFloat() 会返回整数;

Last updated