javascript - 调用 valueOf 时的操作顺序

标签 javascript object event-loop coercion value-of

现在我正在阅读你不知道的 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?

最佳答案

不是,因为你用的是后增量。这会返回变量递增之前的值。

如果您使用预递增 ++i,那么它会递增变量并返回新值。

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
}

关于javascript - 调用 valueOf 时的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39458886/

相关文章:

javascript - 在这种情况下它是否使用异步?我试图理解事件循环+ promise

android - 在 Android XML 中执行任何操作时为 "Unhandled Event Loop Exception"

javascript - 在 Node.js 中解析巨大的二进制文件

javascript - 从 Angular Promise 获取数据

javascript - 如何在 Windows 中正确杀死由 Node.js/Electron 生成的 child_process?

python - 从边界框获取物体【物体检测】

c# - 学习 "PRACTICAL"OOP 的好资源?

javascript - css3 关键帧过渡在 chrome 中不起作用?

javascript - 只返回传递 boolean 值的对象?

node.js - Node.JS 和 IIS 的请求机制(事件循环和线程)