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中form验证出错信息的查看方法
Oct 08 Javascript
Javascript模块化编程详解
Dec 01 Javascript
javaScript中push函数用法实例分析
Jun 08 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
理解javascript函数式编程中的闭包(closure)
Mar 08 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
使用Layui搭建后台管理界面的操作方法
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
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python微信撤回监测代码
2019/04/29 Python
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
幼儿园门卫制度
2014/01/29 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
拾金不昧感谢信
2015/01/21 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers