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 相关文章推荐
showModalDialog 和 showModelessDialog
Jan 22 Javascript
JavaScript入门教程(12) js对象化编程
Jan 31 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
Jan 23 Javascript
window.location的重写及判断location是否被重写
Sep 04 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
jquery实现手机端单店铺购物车结算删除功能
Feb 22 Javascript
vux uploader 图片上传组件的安装使用方法
May 15 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
对layui中table组件工具栏的使用详解
Sep 19 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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
用ODBC的分页显示
2006/10/09 PHP
php实现mysql封装类示例
2014/05/07 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
python操作excel的方法
2018/08/16 Python
Python3爬虫学习入门教程
2018/12/11 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
python中的unittest框架实例详解
2021/02/05 Python
单位领导证婚词
2014/01/14 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
大四毕业生自荐书
2014/07/05 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
九九重阳节标语
2014/10/07 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
MySQL插入数据与查询数据
2022/03/25 MySQL