JavaScript中的数学运算介绍


Posted in Javascript onDecember 29, 2014

JavaScript中,数学运算可藉由两种操作来实现:

1.+、-、*、/、%等操作符。
2.使用Math对象的计算函数。比如,用Math.pow(2,3)来计算2的3次方。

与Java不同,JavaScript中的数学运算不会抛出任何错误。计算结果的溢出、除以0、对负数进行开方这些操作都是合法的,其结果为JavaScript中的特殊值:正负Infinity(无限)、正负0、NaN(非数):

1.正负Infinity。当计算结果比JavaScript所能表示的最大数(Number.MAX_VALUE)还要大时,结果为正Infinity;当计算结果比JavaScript所能表示的最小数(-Number.MAX_VALUE)还要小时,结果为负Infinity。与Infinity相关的+、-、*、/等数学运算均遵循高等数学中关于极限计算的规则。1/0的结果为正Infinity,-1/0的结果则为负Infinity。

2.正负0。当计算结果为正,但小于JavaScript所能表示的最小小数(Number.MIN_VALUE)时,结果为正0;当计算结果为负,但大于JavaScript所能表示的最大负小数(-Number.MIN_VALUE)时,结果为负0。一般情况下,开发人员不需要关心正负0之间的区别。

3.NaN。对于某些即使用正负Infinity也无法表示的特殊计算结果,JavaScript使用NaN来表示(值得注意的是,虽然NaN的字面意思是“非数”,但其类型却是number)。这些特殊计算包括:

1).0/0。
2).Infinity/Infinity。
3).对负数进行开方。
4).对非数值的字符串进行数值转换操作。

对于Infinity和NaN,它们既是“无限”和“非数”的打印结果,同时也是JavaScript中表示这两个特殊值的全局变量名。事实上,在ECMAScript 3中,这两个全局变量还可以被赋以其它值;ECMAScript 5中对这一令人抓狂的规则进行了修正,使得这两个全局变量为只读。除了直接访问Infinity变量和NaN变量,还可以通过访问Number对象的成员变量来使用这两个特殊值:

1.Infinity与Number.POSITIVE_INFINITY是等价的。
2.-Infinity与Number.NEGATIVE_INFINITY是等价的。
3.NaN与Number.NaN是等价的。

在JavaScript中,NaN是一个很有趣的特殊值,它有一个特殊属性:与其它任何值(包括自身)都不相等。判定某个值是否为NaN可以有两个方法:

1.对于变量x,判定x!=x是否为true。此表达式仅当x为NaN时为true。

2.对于变量x,调用JavaScript中的全局函数isNaN(),判定isNaN(x)是否为true。用该方法判定NaN其实并不严谨,因为在4种情况下表达式isNaN(x)均为true:

1).x为NaN。
2).x为字符串,且该字符串不是数字。
3).x为对象。
4).x为undefined。

除了isNaN(),JavaScript还有另外一个有用的全局函数:isFinite()。对于变量a,isFinite(a)在以下几种情况下为true:

1).a为number,但不为NaN或正负Infinity。
2).a为字符串,但该字符串的内容为非NaN、非正负Infinity的数字。
3).a为null。
4).a为boolean值。

由于null、undefined等非数值类型会对结果产生影响,因此个人认为最好在使用isNaN()或isFinite()之前判断参数的类型。

实验

//Test Infinity

var a = Number.MAX_VALUE;

console.log(a*1.1);//Infinity

console.log(a*-1.1);//-Infinity

console.log(1/0);//Infinity

console.log(-1/0);//-Infinity
//Test positive/negative 0

var b = Number.MIN_VALUE;

console.log(b/2);//0

console.log(-b/2);//0
//Test NaN

console.log(0/0);//NaN

console.log(Infinity/Infinity);//NaN

console.log(Math.sqrt(-1));//NaN

console.log(parseInt("string"));//NaN
//Test Infinity comparison

console.log(Infinity === Number.POSITIVE_INFINITY);//true

console.log(-Infinity === Number.NEGATIVE_INFINITY);//true
//Test NaN comparison

console.log(NaN === NaN);//false
//Test isNaN()

console.log(isNaN(NaN));//true

console.log(isNaN("42"));//false

console.log(isNaN("string"));//true

console.log(isNaN({}));//true

console.log(isNaN(undefined));//true

console.log(isNaN(null));//false
//Test isFinite()

console.log(isFinite(42));//true

console.log(isFinite(Infinity));//false

console.log(isFinite(NaN));//false

console.log(isFinite("29"));//true

console.log(isFinite("string"));//false

console.log(isFinite(null));//true

console.log(isFinite(undefined));//false

console.log(isFinite(true));//true

console.log(isFinite(false));//true
Javascript 相关文章推荐
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
jQuery实现左右切换焦点图
Apr 03 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
Dec 01 Javascript
从零学习node.js之模块规范(一)
Feb 21 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
layer扩展打开/关闭动画的方法
Sep 23 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 Javascript
微信小程序webSocket的使用方法
Feb 20 Javascript
jQuery中:lt选择器用法实例
Dec 29 #Javascript
JavaScript中的数值范围介绍
Dec 29 #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
You might like
3.从实例开始
2006/10/09 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
美国创意之家:BulbHead
2017/07/12 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
室内拓展活动方案
2014/02/13 职场文书
工地宣传标语
2014/06/18 职场文书
红旗渠导游词
2015/02/09 职场文书
百家讲坛观后感
2015/06/12 职场文书
医者仁心观后感
2015/06/17 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL