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 表格操作(交替显示、拖动表格行、选择行等)
Jul 29 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
jQuery插件artDialog.js使用与关闭方法示例
Oct 09 jQuery
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
小程序实现留言板
Nov 02 Javascript
浅谈js中的bind
Mar 18 Javascript
发布订阅模式在vue中的实际运用实例详解
Jun 09 Javascript
如何基于js判断浏览器版本
Feb 20 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 Javascript
javascript实现京东快递单号的查询效果
Nov 30 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP多个版本的分析解释
2011/07/21 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
js中less常用的方法小结
2017/08/09 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
js实现缓动动画
2020/11/25 Javascript
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
通过Python实现一个简单的html页面
2020/05/16 Python
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
春节活动策划方案
2014/01/24 职场文书
自主招生推荐信范文
2014/05/10 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
基层党支部承诺书
2015/04/30 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL