1. 加法运算符

1.1 两数求和

  1. 两个数字相加
  2. 布尔值相加,布尔值自动转为数值,再相加

    1.2 字符串相加

  3. 两个字符串相加,拼接返回新的字符串

  4. 一个运算子是字符串,另外一个是非字符串,相加时,非字符串转为字符串在拼接

    1.3 加法运算符的重载

  5. 运算子的不同,导致不同的语法行为

  6. 执行相加或者连接
  7. 只有加法运算符存在重载,其他算术运算符(减法、除法、乘法)所有运算子都转为数值,在运算

    1.4 对象的相加

  8. 如果运算子是对象,必须先转成原始类型的值,然后相加

  9. 对象转为原始类型的值规则如下:
    • 自动调用对象的valueOf方法,一般对象的valueOf方法返回对象自身
    • 再自动调用对象的toString方法,将其转为字符串,一般对象的toString会返回"[object Object]" ```javascript var obj = { p: 1 } obj.valueOf();// {p:1};

obj.valueOf().toString(); // “[object Object]”

  1. 3. 自定义`valueOf``toString`方法
  2. - 自定义valueOf
  3. ```javascript
  4. var obj = {
  5. p:1,
  6. valueOf: function() {
  7. return 2;
  8. }
  9. }
  10. obj + 1; // 3
  11. // 由于valueOf 已经返回一个原始类型的值,所以不在调用toString方法
  • 自定义toString
    1. var obj = {
    2. toString: function() {
    3. return "hello";
    4. }
    5. }
    6. obj + 1; // "hello1";
  1. Date对象特列

    • Date对象会优先调用toString方法
      1. var obj = new Date();
      2. obj.valueOf = function() {
      3. return 1;
      4. }
      5. obj.toString = function() {
      6. return 2;
      7. }
      8. obj + 1; // 3
      9. // 优先调用toString方法

      2. 余数运算符

  2. %返回前一个运算子被后一个运算子除,所得的余数

  3. 运算结果的正负,取决第一个运算子的正负

    3. 自增和自减

  4. ++

  5. --

    4. 数值运算符,负数值运算符

    +,一元运算符

  6. 数值运算符可以将任意值转为数值(与Number函数作用相同)

    1. +true // 1
    2. +[] // 0
    3. +{} // NaN

    -, 负数值运算符

  7. 同样具有转为数值的功能,但是得到的值正负相反

    指数运算符**

    1. 2 ** 4 // 16

    赋值运算符