1. if(a==1&&a==2&&a==3){
  2. return true
  3. }
  4. // a的值:
  5. a={
  6. value:0,
  7. valueOf:function(){
  8. return this.value++
  9. }
  10. }

== 做比较的时候 对象会发生隐式转换,对象隐式转换的顺序如下:

1、如果存在 Symbol.toPrimitive() 方法 优先调用 然后返回

Symbol.toPrimitive被调用时,会接受一个字符串参数,表示当前运算的模式,一个有三种模式。

  • Number:该场合需要转成数值
  • String:该场合需要转成字符串
  • Default:该场合可以转成数值,也可以转成字符串。 ``javascript // 没有 Symbol.toPrimitive 属性的对象 var obj1 = {}; console.log(+obj1); //NaN console.log(${obj1}`); //“[object Object]” console.log(obj1 + “”); //“[object Object]”

// 拥有 Symbol.toPrimitive 属性的对象 var obj2 = { Symbol.toPrimitive { if(hint == “number”){ return 10; } if(hint == “string”){ return “hello”; } return true; } }

console.log(+obj2); //10 —hint in “number” console.log(${obj2}); //hello —hint is “string” console.log(obj2 + “”); //“true” —hint is default ```

2、调用valueOf 如果转换为原始类型则返回

3、调用toString 如果转换为原始类型则返回

4、如果不能转换为原始类型 会报错