运算符是处理数据的基本方法,用来从现有的值得到新的值。
1.概述
JavaScript共提供了10个算术运算符,用来完成基本的算术运算
- 加法运算符
- 减法运算符
- 乘法运算符
- 除法运算符
- 指数运算符
- 余数运算符
- 自增运算符
- 自减运算符
- 数值运算符
- 负数值运算符 减乘除运算符比较单纯,即执行相应的数学运算,重点是加法运算符。
2.加法运算符
2.1基本规则
- 求两个数值的和
- 布尔值相加:布尔值自动转为数值再相加
- 数值与布尔值相加:布尔值自动转为数值再相加
- 字符串相加:加号运算符变成连接运算符,返回新的字符串
- 字符串与非字符串相加:非字符串会转成字符串,再连接在一起返回新的字符串 加法运算符是在运行时决定到底是执行相加还是执行连接,运算子的不同导致不同的语法行为,这种现象称为“重载”(overload),加法运算符存在重载,使用时必须很小心。 除了加法运算符,其他算术运算符不会发生重载,它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。
2.2对象的相加
如果运算子是对象,必须先转成原始类型的值再相加。 对象转成原始类型的值规则如下:
- 首先自动调用对象的valueOf方法(一般来说,对象的valueOf方法总是返回对象自身)
- 这时再调用对象的toString方法,将其转为字符串(对象的toString方法默认返回[object Object]) 知道此规则后,可以自己定义valueOf方法或toString方法,得到想要的结果。有一个特例,如果运算子是一个Date对象的实例,那么会优先执行toString方法。
3.余数运算符
余数运算符(%)返回前一个运算子被后一个运算子除,所得的余数.
- 需要注意,运算结果的正负号由第一个运算子的正负号决定,因此为了得到负数的余数值,可用绝对值函数(Math.abs())
4.自增和自减运算符
自增和自减运算符,是一元运算符,只需要一个运算子。它们的作用是将运算子首先转为数值,然后加上1或者减去1。
- 运算之后,变量的值发生变化,这种效应叫做运算的副作用(side effect)
- 自增和自减运算符是仅有的两个具有副作用的运算符,其他运算符不会改变变量的值
- 自增和自减运算符放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值
5.数值运算符,负数值运算符
- 数值运算符(+)同样使用加号,但它是一元运算符(只需要一个操作数)
- 加法运算符是二元运算符(需要两个操作数) 数值运算符的作用在于可以将任何值转为数值(与Number函数的作用相同). 负数值(-)运算符,也同样具有将一个值转为数值的功能,只不过得到的值正负相反。连用两个负数值运算符,等同于数值运算符。(圆括号不可少,否则会变成自减运算符)。数值运算符和负数值运算符,都会返回一个新的值,而不会改变原始变量的值。
6.指数运算符
指数运算符(**)完成指数运算,前一个运算子是底数,后一个运算子是指数。
- 指数运算符是右结合而不是左结合,即多个指数运算符连用时,先进行最右边的计算
7.赋值运算符
赋值运算符(Assignment Operators)用于给变量赋值。
- 最常见的赋值运算符,当然就是等号(=)
- 赋值运算符还可以与其他运算符结合,形成变体:+=、-=、*=、/=、%=、**=以及与位运算符的结合 这些复合的赋值运算符,都是先进行指定运算,再将得到的值返回给左边的变量。