“===”运算符规则:
- 运算符两端“值相等,数据类型也相等”;
“==”运算符规则:
- 从上到下按照规则比较,直到得到确切结果为止:
-
两端类型相同,比较值;
- 对于引用类型数据而言即比较内存地址;
-
两端存在NaN,直接返回false;
-
undefined 和 null 只有与自身比较,或者相互比较时,才会返回true;
-
两端都是原始类型数据,则转换成数字进行比较;
-
一端是原始类型,一端是引用类型,把引用类型转换成原始类型后再执行第1步;
- 引用类型如何转原始类型?
-
如果对象拥有[Symbol.toPrimitive]方法,调用该方法;
- 若该方法能得到原始值,使用该原始值;
- 若得不到原始值,抛出异常;
-
调用对象的valueOf方法;
- 若该方法能得到原始值,使用该原始值;
- 若得不到原始值,进入下一步;
-
调用对象的toString方法;
- 若该方法能得到原始值,使用该原始值;
- 若得不到原始值,抛出异常;
- PS:
- [Symbol.toPrimitive]方法可以在对象中自定义;
- 对象valueOf方法与toString方法在原型链上都能找到,可以通过自定义去覆盖;
-
- 引用类型如何转原始类型?