如果你趁如何
==工作,你可以简单地创建一个自定义的对象
toString(或
valueOf改变它使用它,使得它满足所有这三个条件,每次返回)功能。
const a = { i: 1, toString: function () { return a.i++; }}if(a == 1 && a == 2 && a == 3) { console.log('Hello World!');}之所以起作用,是因为使用了松散的相等运算符。使用宽松相等时,如果其中一个操作数的类型不同于另一个,则引擎将尝试将一个转换为另一个。如果对象在左侧,数字在右侧,则它将尝试通过首先调用对象(
valueOf如果可调用)将其转换为数字,否则将调用
toString。
toString在这种情况下,我之所以使用它,仅仅是因为它浮现在脑海中,才
valueOf更有意义。如果我改为从返回一个字符串
toString,则引擎将尝试将该字符串转换为一个数字,使我们得到相同的最终结果,尽管路径略长。



