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 相关文章推荐
围观tangram js库
Dec 28 Javascript
JS 无限级 Select效果实现代码(json格式)
Aug 30 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
Dec 02 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
Nov 04 Javascript
js实现简单选项卡制作
Aug 05 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
PHP array 的加法操作代码
2010/07/24 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
angularjs基础教程
2014/12/25 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
python采集百度百科的方法
2015/06/05 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python如何代码集体右移
2020/07/20 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
暑期社会实践感言
2014/02/25 职场文书
理发店策划方案
2014/06/05 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
批评与自我批评总结
2014/10/17 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
死亡诗社观后感
2015/06/05 职场文书
情人节单身感言
2015/08/03 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
德生2P3收音机开箱评测
2022/04/30 无线电
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python