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 相关文章推荐
javascript Window及document对象详细整理
Jan 12 Javascript
jquery怎样实现ajax联动框(一)
Mar 08 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
微信小程序 加载 app-service.js 错误解决方法
Oct 12 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
CSS3+JavaScript实现翻页幻灯片效果
Jun 28 Javascript
Vue3.0中的monorepo管理模式的实现
Oct 14 Javascript
JavaScript分页组件使用方法详解
Jul 26 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
基于mysql的bbs设计(一)
2006/10/09 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
jQuery之网页换肤实现代码
2011/04/30 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
python中sleep函数用法实例分析
2015/04/29 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
存储过程的优点有哪些
2012/09/27 面试题
学院领导推荐信
2013/10/30 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
创先争优一句话承诺
2014/05/29 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
超市督导岗位职责
2015/04/10 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android