关于JS中的Number类型

Number类型

  • 十进制
  • 八进制【第一位必须是零(0),然后是八进制数字序列(0 - 7)】
        var num = 070;  //有效的八进制
        console.log(num); //56:八进制070输出的十进制为56
  • 十六进制【前两位必须是(0x),然后是十六进制数字(0 - 9及A - F(大小写均可))】
        var num = 0xa; //有效的十六进制
        console.log(num); //10:十六进制0xa输出的十进制为10

浮点数

e表示法

        var floatNum1 = 3.125e7; //等于3125000
        var floatNum2 = 3e-7; //等于0.0000003

一道面试题

为什么0.1加0.2的结果不是0.3?如何解决?

: 当计算机计算0.1+0.2的时候,实际上计算的是这两个数字在计算机里所存储的二进制,而0.1和0.2都是无限循环的二进制,由于JavaScript中所用的数字的实现遵循IEEE754标准(在二进制中保留53位有效数字),遵从“0舍1入”,舍去后造成精度丢失。

        //1. 转换为整数后再进行运算,运算后再转换为对应的小数
        var result1 = (0.1 * 10 + 0.2 * 10) / 10 === 0.3; //true
        //2. 使用toPrecision凑整并parseFloat转成数字后再显示
        var result2 = parseFloat((0.1 + 0.2).toPrecision(12)) === 0.3; //true

相关资料:
0.1+0.2 !== 0.3?
JavaScript 浮点数陷阱及解法

数值范围

        console.log(Number.MIN_VALUE, Number.MAX_VALUE);
        //最小数值:5e-324 
        //最大数值:1.7976931348623157e+308
        console.log(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);
        //超出数值范围:-Infinity(负无穷) Infinity(正无穷) isFinite():判断是不是有穷
        console.log(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
        //最小安全值:- 9007199254740991
        //最整数的安全值:9007199254740991

NaN

NaN,即非数值(Not a Number)是一个特殊的数值。

  1. NaN不和任何值相等,包括它本身,只能通过isNaN()函数判断;
  2. isNaN()函数用于检测其参数是否是非数字值(会尝试将这个值转换为数值)。
        console.log(NaN !== NaN); //true
        console.log(isNaN("11")); //false
        console.log(isNaN("11a")); //true
        console.log(isNaN(null)); //false

数值转换

Number()

转换规则如下:

  • 如果是Boolean值:true → 1;false → 0
  • 如果是数值,简单传入和返回
  • 如果是null,返回0
  • 如果是undefined,返回NaN
  • 如果是String,规则如下
    • 只包含数字(整数,浮点数值,十六进制),转换为十进制数值
    • 空字符串,转换为0
    • 包含除上述格式之外的字符,转NaN
  • 如果是对象,先调用对象的valueOf()方法,依照转换规则。若转换结果为NaN,调用对象的toString()方法,再次依照转换规则,返回字符串值。

parseInt()

  1. 忽略字符串前面的空格,找到第一个非空格字符;
  2. 第一个字符不是数字字符或者符号,返回NaN(即parseInt("")返回NaN);
  3. 解析直至遇到非数字字符停止。

第二个参数:明确告诉parseInt要解析一个什么进制格式的字符串。

console.log(parseInt("AF", 16)); //175

parseFloat()

解析到遇见一个无效的浮点数字字符为止。

  1. 第二个小数点无效;
  2. 只解析十进制值,没有用第二个参数指定基数的用法。

一道面试题

JS中Number()(parseFloat())和parseInt()的区别?

: 若字符串出现非数字字符,通过Number()进行数值转换时,返回NaN。通过parseInt()进行数值转换时,会从左到右按顺序解析,直至遇到非数字字符停止。parseFloat()没有用第二个参数指定基数的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值