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