数值(ES6学习笔记)

JS数值的特征
  • 不区分整数值和浮点数值。
  • 所有数值均用浮点数表示。
  • 采用IEEE-754标准定义的64位浮点数格式表示。(整数在实际操作时(如数组索引),则是基于32位整数)。
整数直接量
  • 16进制:0x……

  • 8进制:0o……(在ES6严格模式下,禁止使用八进制)

  • 2进制:0b……

    0xff:255、 0o12:10、 0b1001:9

浮点数直接量
  • 实数写法:由整数部分、小数点和小数部分组成。

    如:3.1415926

  • 指数记数法:在实数部分后跟字母e或E,再跟正负号,在跟一个整型的指数。

    如:5.12e12:5.12×1012;1.44E-8: 1.44×10-8

算术运算
  • 运算符:加+、减-、乘*、除/、余%、指数**(指数操作符为es6新增)

  • 溢出:

    1、当数值运算结果超出了JS能表示的数值上限时:
    a)正值结果为 Ifinity;
    b)负值则为 -Ifinity。

    2、基于 Infinity 的运算:

    // 当数值运算结果超出了JS能表示的数值上限时,溢出
    {
        var c = 1 / 0;
        console.log(c);  // Infinity
    }
    // 基于Infinity的运算结果一般都为 ±Infinity
    {
        var c = Infinity * 10;
        console.log(c);  // Infinity
    }
    // 任何数除Infinity都为0
    {
        var c = 10 / Infinity;
        console.log(c);  // 0
    }
    // Infinity / Infinity = NaN
    {
        var c = Infinity / Infinity;
        console.log(c);  // NaN
    }
    // Infinity除以任何数求余都为NaN
    {
        var c = Infinity % 10;
        console.log(c);  // NaN
    }
    // 任何数除以Infinity求余都为任何数
    {
        var c = 5 % Infinity;
        console.log(c);  // 5
    }
    
  • 下溢(underflow):

    1、当运算结果无限接近0,并比JavaScript能表示的最小数值还小时发生下溢;
    2、JavaScript会返回0,若当一个负数发生下溢时,则返回-0。

  • 被0整除

    简单的返回 ±Infinity。但 0 / 0 = NaN。

    {
        var a = -10 / 0;
        var aa = Infinity / 0;
        console.log(a,aa);  // -Infinity  Infinity
    
        var b = 0 / 0;
        console.log(b); // NaN
    }
    
二进制浮点数与四舍五入错误
  • 实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数。

  • 当JavaScript使用实数时,常常只是真实值的一个近似表示。

  • IEEE-754浮点数表示法是一种二进制表示法,可以精确地表示分数。

    如: 1/2 、1/8 和 1/1024等。

  • 但常用的分数都是十进制分数,二进制浮点数并不能精确表示类似0.1这样的简单数值。

    1、如: 0.3-0.2 = 0.9999999999999998
    2、任何使用二进制浮点数的编程语言中都会有这个问题。
    3、建议,尽可能使用大整数进行等比修正以避免该类错误,如:3-2。

    {
        var a = 1/2;
        console.log(a);  // 0.5
    }
    {
        var a = 0.3 - 0.2;
        console.log(a);  // 0.09999999999999998
    }
    {
        var a = 3 - 2;
        console.log(a);  // 1
    }
    
数值转换
  • JavaScript提供了3个函数可将非数值转换为数值:

    1、 Number( ) —— 无包容性
    2、 parseInt( ) —— 包容性(不四舍五入,只保留整数部分)
    3、 parseFloat( ) —— 包容性

    Number("");      // 0
    Number(false);   // 0
    Number(null);    // 0
    Number(true);    // 1
    Number(undefined);  // NaN
    Number("12.5a");    // NaN
    Number("011");      // 11
    Number("1.1");      // 1.1
    Number("0b1001");   // 9
    
    parseInt("");         // NaN
    parseInt(false);      // NaN
    parseInt(null);       // NaN
    parseInt(true);       // NaN
    parseInt(undefined);  // NaN
    parseInt("12.5a");    // 12
    parseInt("011");      // 11
    parseInt("1.1");      // 1
    parseInt(22.5);       // 22
    parseInt("0xA");      // 10  该转换不能转换2进制和8进制
    parseInt("A",16);     // 10  第一个参数是字符串,第二个参数为指定该字符串的编码
    
    // 该转换不能转换2/8/16进制
    parseFloat("");       // NaN
    parseFloat(false);    // NaN
    parseFloat(null);     // NaN
    parseFloat(true);     // NaN
    parseFloat(undefined);   // NaN
    parseFloat("12.5a");  // 12.5
    parseFloat("011");    // 11
    parseFloat("1.1");    // 1.1
    parseFloat(22.5);     // 22.5
    
各类型转换为数值
  • 字符串:若其值为数字格式,则转换为对应数值,否则为NaN
  • 布尔值:true转换为1,false转换为0
  • undefined:转换为NaN
  • null:转换为0
  • 其他对象:转换为NaN
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值