任何一种编程语言,都少不了算运算符,算术运算符就是进行 + – x ÷ 数学运算的。在编程语言里面,又延伸出来一些 自加、自减运算符。
算出来结果之后要把这个结果给别人,就需要赋值运算符=,这时又延伸出来一些+=、-=、*=、/=、%=。
下面通过一个表格来解释一下这些算术运算符:(初始 y=5 )
运算符
描述
例子
x 运算结果
y 运算结果
+
加法
x = y + 2
7
5
–
减法
x = y – 2
3
5
*
乘法
x = y * 2
10
5
/
除法
x = y / 2
2.5
5
%
取模(余数)
x = y % 2
1
5
++
自增
x = ++ y
6
6
x = y ++
5
6
—
自减
x = — y
4
4
x = y —
5
4
赋值运算符用于给 JavaScript 变量赋值。
给定 x=10和y=5,下面的表格解释了赋值运算符:
运算符
例子
等同于
运算结果
=
x = y
x = 5
+=
x += y
x = x + y
x = 15
-=
x -= y
x = x – y
x = 5
*=
x *= y
x = x * y
x = 50
/=
x /= y
x = x / y
x = 2
%=
x %= y
x = x % y
x = 0
下面详细说说各个操作符的用法和注意点。
加法 +
加法(+)运算的用法如下所示:
var result = 1 + 2;
console.log(result);//3
如果加法操作符两边都是数值,执行常规的加法运算,然后根据下列规则返回结果:
如果有一个操作数是NaN,则结果是NaN。
如果是Infinity加Infinity,则结果是Infinity。
如果是-Infinity加-Infinity,则结果是-Infinity。
如果是Infinity加-Infinity,则结果是NaN。
如果是+0加+0,则结果是+0。
如果是-0加-0,则结果是-0。
如果是+0加-0,则结果是+0。
下面实例考证:
var a = 1 + NaN;
var b = Infinity + Infinity;
var c = -Infinity + -Infinity;
var d = Infinity + -Infinity;
var e = +0 + +0;
var f = -0 + -0;
var g = +0 + -0;
console.log(a);// NaN
console.log(b);// Infinity
console.log(c);// -Infinity
console.log(d);// NaN
console.log(e);// 0
console.log(f);// -0
console.log(g);// 0
不过,如果有一个操作数是字符串,那么就应该遵循下列规则:
如果操作数都是字符串,则将第一个操作数和第二个操作数拼接起来。
如果只有一个操作数是字符串,则将另一个操作数转化为字符串,然后再将两个恶字符串拼接起来。
如果有一个操作数对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值,然后再应用前面字符串的规制。对于null和undefined,分别调用String()方法取得字符串”undefined”和”null”。
举个例子:
var result = 5 + 5;//两个数值相加
console.log(result);//10
var result1 = 5 + "5";//一个数值和一个字符串进行加法运算
console.log(result1);//"55"
var b = null;
var a = '5' + b;
console.log(a);//5null: null转成字符串后就是null
var b = undefined;
var a = '5' + b;
console.log(a);//5undefined:undefined转成字符串就是undefined
减法
减法运算(-)用法如下所示:
var a = 2 - 1;
console.log(a);//1
与加法操作符类似,JavaScript中的减法在处理个种数据的时候,同样遵循一些特殊规则:
如果减法操作符两边都是数值,执行常规的减法运算
如果有一个操作数是NaN,则结果是NaN。
如果是Infinity减Infinity,则结果是NaN。
如果是-Infinity减-Infinity,则结果是NaN。
如果是Infinity减-Infinity,则结果是Infinity。
如果是-Infinity减Infinity,则结果是-Infinity。
如果是+0减+0,则结果是+0。
如果是-0减-0,则结果是+0。
如果是-0减+0,则结果是-0。
如果一个字符串是字符串、布尔值、null或undefined,则现在后台调用Number()函数将其转换为数值,然后再根据上面的规则进行减法运算。如果调用Number()函数转换的结果是NaN,则运算的结果是NaN。
如果有一个操作数是对象,则调用valueOf()方法取得该对象的数值,如果得到的值是NaN,则减法运算的结果就是NaN,如果对象没有valueOf方法,则调用toString()方法并将得到的字符串转换为数值。
举个例子:
var result1 = 5 - true;
var result2 = NaN - 1;
var result3 = 5 - 3;
var result4 = 5 - "";
var result5 = 5 - "2";
var result6 = 5 - null;
console.log(result1);//4,因为true转换为1
console.log(result2);//NaN
console.log(result3);//2
console.log(result4);//5,因为""被转换为0
console.log(result5);//3,因为"2"被转换为2
console.log(result6);//5,因为null被转换为0
乘法
乘法运算(*)用法如下所示:
var result = 3 * 5;
console.log(result);// 15
在处理特殊值的情况下,乘法遵循下列规则:
如果操作的数都是数值,执行常规的乘法运算
如果有一个操作数是NaN,则结果是NaN
如果是Infinity与0相乘,则结果是NaN
如果是Infinity与非0数相乘,则结果是Infinity或-Infinity,取决于有符号操作数的符号
如果Infinity与Infinity相乘,则结果为Infinity
如果有一个操作数不是数值,则在后台调用Number()函数将其转换为数值
通过代码来说明,印象会更深:
var a = 5 * 5;
var b = 5 * '5';
var c = 5 * NaN;
var d = Infinity * 5;
var e = Infinity * -5;
var f = Infinity * Infinity;
var g = Number('56');
var h = Number('55a');
var m = parseInt('55a');
console.log(a); //25
console.log(b); //25
console.log(c); //NaN
console.log(d); //Infinity
console.log(e); //-Infinity
console.log(f); //Infinity
console.log(g); //5
console.log(h); //NaN:字母不能转换成数字,所以是NaN
console.log(m);//55
除法
除法操作符(/)用法如下所示:
var result = 15 / 3;
console.log(result); //5
除法与乘法类似,也有特殊的处理规则:
如果操作的数都是数值,执行常规的除法运算
如果有一个操作数是NaN,则结果是NaN
如果是0与0相除,则结果是NaN
如果是非0有限数被0除,则结果是Infinity或-Infinity,取决于有符号操作数的符号
如果Infinity与Infinity相除,则结果为NaN
如果有一个操作数不是数值,则在后台调用Number()函数将其转换为数值
取余(求模)
取余运算用法如下所示:
var result = 10 % 3;
console.log(result); //1
取余与乘除类似,有以下特殊规则来处理特殊的值:
如果操作的数都是数值,执行常规的除法运算。返回除得的余数
如果被除数是无穷大值,而除数是有限大的值,则结果是
如果被除数是有限大的值,而除数是0,则结果是NaN
如果Infinity被Infinity除,则结果是NaN
如果被除数是有限大的值而除数是无穷大的值,则结果是被除数
如果除数是零,则结果是零
如果有一个操作数不是数值,则在后台调用Number()函数将其转换为数值
在进行算术运算的时候,变量数据是可以根据需要转换类型的。有几个特殊的数据类型:
NaN:Not a Number,他是number类型,翻译成中文就是非数,非数也是数字类型。NaN值是JS在执行数字运算或者数字类型转换时失败的结果值。
Infinity: 这个也是number类型,翻译成中午是无限大的意思。
注意:在进行算术运算的时候,js会调用Number()进行隐式类型转换,这个函数和 parseInt()有不同的规则,可以参考: