js细节

JavaScript中的数值范围介绍
2016年09月07日 18:10:06 胖鹅68 阅读数 231
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/hbiao68/article/details/52683415
文章参考
http://www.jb51.net/article/59145.htm

JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaScript中所有的数都是浮点数。遵循IEEE 754标准(浮点数算术标准),JavaScript所能表示的数值范围为正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方,这两个边界值可以分别通过访问Number对象的MAX_VALUE属性和MIN_VALUE属性来获取。

对于整数,根据ECMAScript标准的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。值得注意的是,对于整数的位运算(比如移位等操作),JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。

function add(arg1, arg2) {
    return (Math.round(arg1 * 100) + Math.round(arg2 * 100)) / 100;
  }

应用该方法进行两数相加的运算结果:

0.1+0.2=0.3
2.22+2.22=4.44
4.44+2.22=6.66
6.66+2.22=8.88
8.88+2.22=11.1
11.10+2.22=13.32
13.32+2.22=15.54
两数相减(既一正数加一负数):

 function subtract(arg1, arg2) {
    return this.add(arg1, -arg2);
  }

两数相乘:

  function multiple(arg1, arg2) {
    return (Math.round(arg1 * 100) * Math.round(arg2 * 100)) / 10000;
  }

两数相除:

/**
   * arg1与arg2相除,并以四舍五入的方式保留小数点后2位
   */
  function divide(arg1, arg2) {
    var d1, d2,
      n1 = Number(arg1.toString().replace(".", "")),
      n2 = Number(arg2.toString().replace(".", ""));
    try {d1 = arg1.toString().split(".")[1].length;} catch (e) {d1 = 0;}
    try {d2 = arg2.toString().split(".")[1].length;} catch (e) {d2 = 0;}
    return this.toFixed((n1 / n2) * Math.pow(10, d2 - d1), 2);
  }
 
  /**
   * arg以四舍五入的方式保留小数点后n位
   */
  function toFixed(arg, n) {
    if(n == 0) {
      return Math.round(arg)
    }
    try {
      var d, carryD, i, 
      ds = arg.toString().split('.'),
      len = ds[1].length,
      b0 = '', k = 0
      if (len > n) {
        while(k < n && ds[1].substring(0, ++k) == '0') {
          b0 += '0'
        }
        d = Number(ds[1].substring(0, n))
        carryD = Math.round(Number('0.' + ds[1].substring(n, len)))
        len = (d + carryD).toString().length
        if (len > n) {
          return Number(ds[0]) + 1
        } else if (len == n) {
          return Number(ds[0] + '.' + (d + carryD))
        }
        return Number(ds[0] + '.' + b0 + (d + carryD))
      }
    } catch (e) {}
    return arg
}

当数字运算结果超过了JavaScript所能表示的数字上限时,被称为上溢,用Infinity(正无穷大)和-Infinity(负无穷大)来表示。基于正无穷大和负无穷大的所有数学运算其结果也是正无穷大和负无穷大。

var a = 10 / 0 //返回Infinity
var b = -10 / 0 //返回-Infinity

[size=medium][color=blue]下溢(UnderFlow)[/color][/size]

当运算结果无限接近于零或是超出JavaScript所能表示的最小值时,被称为下溢,用零来表示。
var a = Number.MIN_VALUE / 2 //返回0

[size=medium][color=blue]零除以零[/color][/size]

var c = 0 / 0 //返回NaN

isNaN(x) 当x是NaN时返回true, 其他返回false

isFinite(x) 当x不是NaN,Infinity,-Infinity时返回true
由计算产生的infinity每次增加都是infinity,而如果直接调用infinity,则进行加法会返回NaN。这个点是不太常考到的。
两数相加方法:
undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象
undefined

在变量提升(预解析)阶段,只声明未定义,默认值就是undefined。
在JS的严格模式下(”use strict”),没有明确的主体,this指的就是undefined。
函数定义没有返回值(return或者return后面什么也不带),默认的返回值就是undefined。
函数定义形参不传值,默认就是undefined。
对象没有这个属性名,属性值默认就是undefined。
在数组的find方法中,没有找到的情况下是undefined。
null

手动设置变量的值或者对象某一个属性值为null(此时不赋值,会在后面的代码中进行赋值,相当于初始化。)
在JS的DOM元素获取中,如果没有获取到指定的元素对象,结果一般是null。
Object.prototype._proto_的值也是null。
在正则捕获的时候,如果没有捕获到结果,默认也是null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值