1. 加法运算符
1.1 两数求和
- 两个数字相加
-
1.2 字符串相加
两个字符串相加,拼接返回新的字符串
一个运算子是字符串,另外一个是非字符串,相加时,非字符串转为字符串在拼接
1.3 加法运算符的重载
运算子的不同,导致不同的语法行为
- 执行相加或者连接
只有加法运算符存在重载,其他算术运算符(减法、除法、乘法)所有运算子都转为数值,在运算
1.4 对象的相加
如果运算子是对象,必须先转成原始类型的值,然后相加
- 对象转为原始类型的值规则如下:
- 自动调用对象的
valueOf
方法,一般对象的valueOf
方法返回对象自身 - 再自动调用对象的
toString
方法,将其转为字符串,一般对象的toString会返回"[object Object]"
```javascript var obj = { p: 1 } obj.valueOf();// {p:1};
- 自动调用对象的
obj.valueOf().toString(); // “[object Object]”
3. 自定义`valueOf`或`toString`方法
- 自定义valueOf
```javascript
var obj = {
p:1,
valueOf: function() {
return 2;
}
}
obj + 1; // 3
// 由于valueOf 已经返回一个原始类型的值,所以不在调用toString方法
- 自定义toString
var obj = {
toString: function() {
return "hello";
}
}
obj + 1; // "hello1";