调用 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
}
现在我正在阅读你不知道的 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 为 运行?
时不应返回 4a++是后缀,它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
}