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 相关文章推荐
jQuery插件 tabBox实现代码
Feb 09 Javascript
Javascript 面向对象编程(一) 封装
Aug 28 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
理解javascript中的原型和原型链
Jul 30 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
vue中实现回车键登录功能
Feb 19 Javascript
js实现筛选功能
Nov 24 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
两种php实现图片上传的方法
2016/01/22 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
javascript变量提升和闭包理解
2018/03/12 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
Python操作串口的方法
2015/06/17 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
员工考核管理制度
2014/02/02 职场文书
《落花生》教学反思
2014/02/25 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
法院个人总结
2015/03/03 职场文书
少先队中队工作总结
2015/08/14 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python