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 相关文章推荐
jquery.validate使用攻略 第三部
Jul 01 Javascript
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
Apr 01 Javascript
JQuery 图片的展开和伸缩实例讲解
Apr 18 Javascript
jQuery实现个性翻牌效果导航菜单的方法
Mar 09 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 Javascript
js+html5生成自动排列对话框实例
Oct 09 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
微信小程序template模板与component组件的区别和使用详解
May 22 Javascript
Vue表单控件数据绑定方法详解
Feb 05 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
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP对象相关知识总结
2017/04/09 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
PHP之header函数详解
2021/03/02 PHP
JS 常用校验函数
2009/03/26 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python元字符的用法实例解析
2018/01/17 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
使用python接入微信聊天机器人
2020/03/31 Python
pybind11在Windows下的使用教程
2019/07/04 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Python持续监听文件变化代码实例
2020/07/22 Python
python使用建议技巧分享(三)
2020/08/18 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
家长给孩子的评语
2014/01/30 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS