今、私は You Don't Know JS Types & Grammar Ch 4 を読んでいて、強制でこの例に出くわしました。https://repl.it/D7w2
var i = 2;
Number.prototype.valueOf = function() {
console.log("called"); //this logs twice
return i++;
};
var a = new Number( 42 );
if (a == 2 && a == 3) {
console.log( "Yep, this happened." ); //this is logged
}
物事が1つずれていない理由がわかりません。var i は 2 から始まるので、a == 2 にヒットしたときに 3 が返されるべきではなく、a == 3 が実行されたときに 4 が返されるべきではありませんか?