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 相关文章推荐
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
js删除所有的cookie的代码
Nov 25 Javascript
jQuery focus和blur事件的应用详解
Jan 26 Javascript
js预加载图片方法汇总
Jun 15 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
简单介绍react redux的中间件的使用
Apr 06 Javascript
JS使用数组实现的队列功能示例
Mar 04 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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利用cookie实现访问次数统计代码
2011/05/19 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python引用模块和查找模块路径
2016/03/17 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
实习自我鉴定
2013/12/15 职场文书
行政专员工作职责
2013/12/22 职场文书
保健品市场营销方案
2014/03/31 职场文书
股东合作协议书范本
2014/04/14 职场文书
求职自我推荐信
2014/06/25 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL