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 相关文章推荐
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
JavaScript闭包详解
Feb 02 Javascript
Jquery使用val方法读写value值
May 18 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
javascript中类的定义方式详解(四种方式)
Dec 22 Javascript
javascript的BOM
May 03 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 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
php5.3 goto函数介绍和示例
2014/03/21 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
php数据访问之查询关键字
2016/05/09 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
python flask 多对多表查询功能
2017/06/25 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
python中下标和切片的使用方法解析
2019/08/27 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
python机器学习库xgboost的使用
2020/01/20 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
xxx同志考察材料
2014/02/07 职场文书
酒店营销策划方案
2014/02/07 职场文书
理发店策划方案
2014/06/05 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript