JavaScript中的数值范围介绍


Posted in Javascript onDecember 29, 2014

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之间的整数。

实验

显示JavaScript的最大数的绝对值、最小小数的绝对值:

console.log(Number.MAX_VALUE);

console.log(Number.MIN_VALUE);

显示结果为1.7976931348623157e+308和5e-324。

对正负2的53次方范围以外的整数,JavaScript无法给出精确的计算结果:

var a = 9007199254740992;

console.log(a+3);

正确的运算结果应该是9007199254740995,但JavaScript给出的计算结果却是9007199254740996。尝试改变计算公式后可以发现,只要整数大于9007199254740992,这种计算结果的错误将频繁出现。如果说计算精度的偏差尚可接受的话,那么下面这个例子的后果就更严重了:

var MAX_INT = 9007199254740992;

for (var i = MAX_INT; i < MAX_INT + 2; ++i) {

  // infinite loop

}

由于计算精度问题,上面的for语句将陷入死循环。

对于位运算,JavaScript仅支持32位整型数:

var smallInt = 256;

var bigInt = 2200000000;

console.log(smallInt / 2);

console.log(smallInt >> 1);

console.log(bigInt / 2);

console.log(bigInt >> 1);

可以看到,对于32位以内的整数(256),JavaScript可以进行正确的位运算,所得结果与除法运算的结果一致(128)。而对于32位以外的整数,JavaScript可以进行正确的除法运算(1100000000),但进行位运算后所得结果却与正确结果相去甚远(-1047483648)。

Javascript 相关文章推荐
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
js有序数组的连接问题
Oct 01 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
Jul 21 Javascript
jQuery提交多个表单的小技巧
Jul 27 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
jQuery操作Table技巧大汇总
Jan 23 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
JavaScript常用小技巧小结
Dec 29 #Javascript
jQuery中:gt选择器用法实例
Dec 29 #Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 #Javascript
JavaScript中的值类型详细介绍
Dec 29 #Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 #Javascript
JavaScript中的console.assert()函数介绍
Dec 29 #Javascript
jQuery中:eq()选择器用法实例
Dec 29 #Javascript
You might like
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
Python编程之Re模块下的函数介绍
2017/10/28 Python
简单了解Python中的几种函数
2017/11/03 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Python常用特殊方法实例总结
2019/03/22 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
乡镇纠风工作实施方案
2014/03/22 职场文书
小学数学课题方案
2014/06/15 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
思想品德课教学反思
2016/02/24 职场文书