1

今、私は 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 が返されるべきではありませんか?

4

2 に答える 2

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
}

于 2016-09-12T21:17:46.657 に答える
1

a++ は接尾辞です。値を返し、インクリメントします。

于 2016-09-12T21:16:44.390 に答える