浅记:JS等号运算符与转换规则

100 阅读1分钟

“===”运算符规则:

  • 运算符两端“值相等,数据类型也相等”;

“==”运算符规则:

  • 从上到下按照规则比较,直到得到确切结果为止:
  1. 两端类型相同,比较值;

    • 对于引用类型数据而言即比较内存地址;
  2. 两端存在NaN,直接返回false;

  3. undefined 和 null 只有与自身比较,或者相互比较时,才会返回true;

  4. 两端都是原始类型数据,则转换成数字进行比较;

  5. 一端是原始类型,一端是引用类型,把引用类型转换成原始类型后再执行第1步;

    • 引用类型如何转原始类型?
      1. 如果对象拥有[Symbol.toPrimitive]方法,调用该方法;

        • 若该方法能得到原始值,使用该原始值;
        • 若得不到原始值,抛出异常;
      2. 调用对象的valueOf方法;

        • 若该方法能得到原始值,使用该原始值;
        • 若得不到原始值,进入下一步;
      3. 调用对象的toString方法;

        • 若该方法能得到原始值,使用该原始值;
        • 若得不到原始值,抛出异常;
      • PS:
        • [Symbol.toPrimitive]方法可以在对象中自定义;
        • 对象valueOf方法与toString方法在原型链上都能找到,可以通过自定义去覆盖;

练一练:

20230606193443938.png