+
、减-
、乘*
、除/
、求余运算符%
、数值取反运算符-
。
加法运算
示例1
注意特殊操作数的求和运算。var n = 5; //定义并初始化任意一个数值 console.log(NaN + n); //NaN与任意操作数相加,结果都是NaN console.log(Infinity + n); //Infinity与任意操作数相加,结果都是Infinity console.log(Infinity + Infinity); //Infinity与Infinity相加,结果是Infinity console.log((-Infinity) + (-Infinity)); //负Infinity相加,结果是负Infinity console.log((-Infinity) + Infinity); //正负Infinity相加,结果是NaN
示例2
加运算符能够根据操作数的数据类型,决定是相加操作,还是相连操作。console.log(1 + 1); //如果操作数都是数值,则进行相加运算 console.log(1 + "1"); //如果操作数中有一个是字符串,则进行相连运算 console.log(3.0 + 4.3 + ""); //先求和,再连接,返回"7.3" console.log(3.0 + "" + 4.3); //先连接,再连接,返回"34.3" //3.0转换为字符串3
在使用加法运算符时,应先检查操作数的数据类型是否符合需要。
减法运算
示例1
注意特殊操作数的减法运算。var n = 5; //定义并初始化任意一个数值 console.log(NaN - n); //NaN与任意操作数相减,结果都是NaN console.log(Infinity - n); //Infinity与任意操作数相减,结果都是Infinity console.log(Infinity - Infinity); //Infinity与Infinity相减,结果是NaN console.log((-Infinity) - (-Infinity)); //负Infinity相减,结果是NaN console.log((-Infinity) - Infinity); //正负Infinity相减,结果是-Infinity
示例2
在减法运算中,如果操作数为字符串,先尝试把它转换为数值,再进行运算。如果有一个操作数不是数字,则返回 NaN。console.log(2 - "1"); //返回1 console.log(2 - "a"); //返回NaN
使用值减去 0,可以快速把值转换为数字。例如 HTTP 请求中查询字符串一般都是字符串型数字,可以先把这些参数值减去 0 转换为数值。这与调用 parseFloat() 方法的结果相同,但减法更高效、快捷。减法运算符的隐性转换如果失败,则返回 NaN,这与使用 parseFloat() 方法执行转换时的返回值是不同的。
例如,对于字符串“100aaa”而言,parseFloat() 方法能够解析出前面几个数字,而对于减法运算符来说,则必须是完整的数字,才可以进行转换。
console.log(parseFloat("100aaa")); //返回100 console.log("100aaa" - 0); //返回NaN
对于布尔值来说,parseFloat() 方法能够把 true 转换为 1,把 false 转换为 0,而减法运算符视其为 NaN。
对于对象来说,parseFloat() 方法会尝试调用对象的 toString() 方法进行转换,而减法运算符先尝试调用对象的 valueOf() 方法进行转换,失败之后再调用 toString() 进行转换。
乘法运算
注意特殊操作数的乘法运算。var n = 5; //定义并初始化任意一个数值 console.log(NaN * n); //NaN与任意操作数相乘,结果都是NaN console.log(Infinity * n); //Infinity与任意非零正数相乘,结果都是Infinity console.log(Infinity * (- n)); //Infinity与任意非零负数相乘,结果是-Infinity console.log(Infinity * 0); //Infinity与0相乘,结果是NaN console.log(Infinity * Infinity); //Infinity与Infinity相乘,结果是Infinity
除法运算
注意特殊操作数的除法运算。var n = 5; //定义并初始化任意一个数值 console.log(NaN / n); //如果一个操作数是NaN,结果都是NaN console.log(Infinity / n); //Infinity被任意数字除,结果是Infinity或-Infinity //符号由第二个操作数的符号决定 console.log(Infinity / Infinity); //返回NaN console.log(n / 0); //0除一个非无穷大的数字,结果是Infinity或-Infinity,符号由第二个操作数的符号决定 console.log(n / -0); //返回-Infinity,解释同上
求余运算
求余运算也称模运算例如:console.log(3 % 2); //返回余数1模运算主要针对整数进行操作,也适用于浮点数。例如:
console.log(3.1 % 2.3); //返回余数0.8000000000000003
示例
注意特殊操作数的求余运算。var n = 5; //定义并初始化任意一个数值 console.log(Infinity % n); //返回NaN console.log(Infinity % Infinity); //返回NaN console.log(n % Infinity); //返回5 console.log(0 % n); //返回0 console.log(0 % Infinity); //返回0 console.log(n % 0); //返回NaN console.log(Infinity % 0); //返回NaN
取反运算
取反运算符是一元运算符,也称一元减法运算符。示例
注意特殊操作数的取反运算。console.log(- 5); //返回-5。正常数值取负数 console.log(- "5"); //返回-5。先转换字符串数字为数值类型 console.log(- "a"); //返回NaN。无法完全匹配运算,返回NaN console.log(- Infinity); //返回-Infinity console.log(- (- Infinity)); //返回Infinity console.log(- NaN); //返回NaN
与一元减法运算符相对应的是一元加法运算符,利用它可以快速把一个值转换为数值。
递增和递减
递增++
和递减--
运算就是通过不断的加 1 或减 1,然后把结果赋值给左侧操作数,以实现改变自身结果的一种简洁方法。作为一元运算符,递增运算符和递减运算符职能作用于变量、数组元素或对象属性,不能作用于直接量。根据位置不同,可以分为 4 种运算方式:
- 前置递增(++n):先递增,再赋值。
- 前置递减(--n):先递减,再赋值。
- 后置递增(n++):先赋值,再递增。
- 后置递减(n--):先赋值,再递减。
示例
下面比较递增和递减的 4 种运算方式所产生的结果。var a = b = c = 4; console.log(a++); //返回4,先赋值,再递增运算结果不变 console.log(++b); //返回5,先递增,再赋值,运算结果加1 console.log(c++); //返回4,先赋值,再递增,运算结果不变 console.log(c); //返回5,变量的值加1 console.log(++c); //返回6,先递增,再赋值,运算结果加1 console.log(c); //返回6
递增和递减是相反的操作,在运算之前都会试图转换值为数值类型,如果失败则返回 NaN。