算术运算符包括加(+)、减(-)、乘(*)、除(/)、余数运算符(%)、数值取反运算符(-)。
【示例1】 特殊运算数的运算结果比较特殊,需要特别留意。
【示例2】 加运算符能够根据运算数的数据类型,尽可能地把数字转换成可以执行相加或相连运算的数值或字符串。
【示例3】 下面两个表达式中,由于空字符串的位置不同,运算结果也不同。在第一行代码中,3.0和4.3都是数值类型,因此加号运算符就执行相加操作,由于第3个运算数是字符串,则把第一个加号运算结果转换为字符串并与空字符串进行相连操作。而第二行代码中则不同,第一个加号运算符首先把数值3.0转换为字符串,然后执行连接操作,所以结果也就不同。
提示: 为了避免误解,使用加法运算符时,应先检查运算数的数据类型是否符合需要。
【示例1】 特殊运算数的运算结果比较特殊,需要特别留意。
【示例2】 在减法运算中,如果有一个运算数不是数字,则返回值为NaN;如果数字为字符串,则会把它转换为数值之后,再进行运算。
利用减法运算可快速把一个值转换为数字。例如,由于HTTP请求值一般都是字符串数字,可以让这些字符串减去0快速转换为数值。这与调用parseFloat()方法结果相同,但减法运算符更高效、更快捷。减法运算符的隐性转换如果失败,则返回NaN,这与使用parseFloat()方法执行转换时返回值是不同的。
【示例3】 对于字符串来说,减法运算符能够完全匹配进行转换,如果字符串是非数字的值,则返回NaN;而parseFloat()方法则通过逐字符解析并努力转换为数值。
例如,对于字符串"100aaa"而言,parseFloat()方法能够解析出前面几个数字,而对于减法运算符来说,则必须是完整的数字时,可以进行完全匹配转换。
对于布尔值来说,parseFloat()方法能够把true转换为1,把false转换为0,而减法运算符视其为NaN。
对于对象来说,parseFloat()方法直接尝试调用对象的toString()方法进行转换,而减法运算符先尝试调用对象的valueOf()方法进行转换,失败之后再调用toString()方法进行转换。
两个正数相乘,则为正数;两个负数相乘,则为正数;一正一反相乘,则为负数。
【示例】 特殊运算数的运算结果比较特殊,需要特别留意。
两个正数相除,则为正数;两个负数相除,则为正数;一正一反相除,则为负数。
【示例】 特殊运算数的运算结果比较特殊,需要特别留意。
也称模运算,通俗地说就是求余数。例如:
alert(3 % 2); //返回余数1
模运算主要针对整数执行操作,但是它也适用浮点数,例如:
alert(3.1 % 2.3); //返回余数0.8000000000000003
【示例】 特殊运算数的运算结果比较特殊,需要特别留意。
取反运算符是一元运算符,或称一元减法运算符。
【示例】 下面列举特殊运算数的取反运算结果。
提示: 与一元减法运算符相对应的还有一个一元加法运算符,在实际开发中,一元加法运算符很少使用,不过可以利用它把非数值型的数字快速地转换为数值型数值。
递增(++)和递减(--)运算就是通过不断加1或减1以实现改变自身值的一种简洁方法。递增运算符和递减运算符是一元运算符,只能够作用于变量、数组元素或对象属性,这是因为在运算过程中会执行赋值运算,赋值运算左侧必须是一个变量、数组元素或对象属性,只有这样赋值才得以实现。
【示例1】 下面代码是错误用法:
alert(4++); //返回错误
下面代码是正确的用法:
递增运算符和递减运算符有位置讲究,位置不同所得运算结果也不同。
【示例2】 下面递增运算符是先执行赋值运算,然后再执行递加运算。即先计算表达式的返回值,最后才把自身值递加。
而下面的递增运算符是先执行递加运算,再返回表达式的值。
【示例3】 下面代码可以直观演示每个表达式与变量n的值并非都是同步的。
递增运算符和递减运算符是相反操作的一对。它们在运算之前都会试图转换值为数值类型,如果失败则返回NaN。