调用 valueOf 时的操作顺序

Order of operations when valueOf is called

现在我正在阅读你不知道的 JS 类型和语法第 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
}

我不明白为什么事情不差一点。由于 var i 从 2 开始,当它命中 a == 2 时不应返回 3,然后当 a == 3 为 运行?

时不应返回 4

a++是后缀,它returns值然后递增。

不,因为你使用了post增量。 returns 变量在递增之前的 old 值。

如果您使用预递增 ++i 则它会递增变量并 returns 新值。

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
}