加法运算符
按照不同的数据类型,运算可分为以下几种情况:
- 数值+数值:纯粹的数学计算,如1+1=2
- 数值+字符串 / 字符串+数值:加法运算符遇到字符串,会执行“连接”操作。如1+‘a’=1a
// 加法运算符
// 从左到右的运算次序,字符串的位置不同会导致不同的结果:相加或者连接。这种不同的语法行为,叫做“重载”(overload)
'3'+4+5 // 345
3+4+'5' // 75
// 减法、乘法、除法运算符都是把数据转为数值后,再计算
- 数值+对象:对象会先转为原始类型的值,再执行“连接”操作
var obj = {p: 1}; //obj是一个对象
obj + 2 //obj对象的原始类型的值是[object Object],所以obj + 2的结果是 [object Object]2
【注】
对象转成原型类型的值,规则为:
- 自动调用对象的valueOf方法,返回对象自身。
- 返回对象自身后,自动调用对象的toString方法,将对象转为字符串,即[object Object]
余数运算符
-1 % 2 // -1
1 % -2 //1
自增和自减运算符
特点:
- 一元运算符
- 相比其他运算符,自增和自减运算符会改变变量的值(这个情况称为运算的副作用 - side effect)
a++ //会先返回a的值,再自增
++a //先自增,再返回新的值
数值运算符
数值运算符和加法运算符
- 相同点:使用+号
- 区别:数值运算符是一元计算符(只需要一个操作数),加法运算符是二元计算符
数值运算符的作用:将任何值转换为数值。
数值运算符和负数值运算符:
- 数值运算符:+
- 负数值运算符:-
var a = 1;
+a; //返回1
-a; //返回-1
指数运算符
特点:右结合
2 ** 3 ** 4 //相当于2**(3**4)