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 相关文章推荐
js 上传图片预览问题
Dec 06 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
jquery解析XML及获取XML节点名称的实现代码
May 18 Javascript
layui导航栏实现代码
May 19 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
node.js处理前端提交的GET请求
Aug 30 Javascript
如何通过JS实现转码与解码
Feb 21 Javascript
React四级菜单的实现
Apr 08 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读取目录下所有文件的代码
2008/01/07 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
accesskey 提交
2006/06/26 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
用Python写冒泡排序代码
2016/04/12 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
父亲追悼会答谢词
2014/01/17 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
上课看小说检讨书
2014/02/22 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
用Python可视化新冠疫情数据
2022/01/18 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python