2016-09-12 24 views
1

今私はあなたが知らないJS型を読んでいます&文法4章ここで私は強制的にこの例を見つけました。物事が1でオフにされない理由をhttps://repl.it/D7w2valueOfが呼び出されたときの操作の順序

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で始まるので、== 2に当たると3が返されず、== 3が実行されたときに4が返されないはずです。

+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 
 
}

+0

をインクリメントする前の値を返します。私は追跡していませんが、それ以上の場合は少なくとも1日に2〜3日かかるようです。私はプログラミングのことを教えてくれた人たちのことをもっと尊敬していると思います。なぜなら2つの違いは私にとってとてもうまく説明されていたからです。私は、それがどのオペレーターか、それがどのように機能するかについて考えるのをやめました。一方、私は今も、クロックスフォードが中置詞を嫌っていることに感謝しています。人々は彼らがどのように働いているかを知っていれば、それを使うことに問題はないでしょうが、それは混乱の原因になります。 – vlaz

+0

@vlazこれは接頭辞ではなく、接頭辞または接尾辞です。 'a + b'は中置演算子を持ちます。 – Barmar

+0

@vlaz '++'はほとんどの場合、 'for(i = 0; i Barmar

1

a ++は後置ですが、値を返してからインクリメントします。

関連する問題