js 实现 a == 'juejin' && a == 666 && a == 888

什么是隐式转换


在 javascript 中,当运算符在运算时,如果两边数据类型不统一,CPU就无法进行运算,这时 javascript 会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算。这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换。

当引用类型和基础类型进行运算时,会将引用类型转换为基础类型。在 javascript 中,每个引用类型都有他们的内置方法,其中有两个内置方法 valueOf() 和 toString():

  • toString(): 返回对象的字符串表示。
  • valueOf(): 返回对象对应的字符串、数值或布尔值表示。通常与 toString()的返回值相同。

他们能够将 Object 类型隐式转换为基础类型,从而进行运算和比较。


const a = {
 count: 0, // 记录当前是第几次比较
 valueOf() {
   this.count++;
   if(this.count === 1) {
     return 'juejin'
   } else if(this.count === 2) {
     return 666
   } else {
     return 888
   }
 }
}

console.log(a == 'juejin' && a == 666 && a == 888)  // true 

原文地址:https://juejin.cn/post/6975693930096492580

原文地址:https://www.cnblogs.com/fuyao/p/14925697.html