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 ajax 用户无刷新登录方法详解
Apr 28 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
React教程之封装一个Portal可复用组件的方法
Jan 02 Javascript
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 jQuery
使用layer模态框给新页面传值的方法
Sep 27 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 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常用ODBC函数集(详细)
2013/06/24 PHP
yii数据库的查询方法
2015/12/28 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
chrome原生方法之数组
2011/11/30 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
整理Python最基本的操作字典的方法
2015/04/24 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Python实现最大子序和的方法示例
2019/07/05 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
解决Python对齐文本字符串问题
2019/08/28 Python
Python csv模块使用方法代码实例
2019/08/29 Python
python实现复制大量文件功能
2019/08/31 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
应届生高等护理求职信
2013/10/12 职场文书
老师推荐信
2013/10/28 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
升职自荐信范文
2015/03/27 职场文书
大学生受助感言
2015/08/01 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL