爲什麼此代碼輸出3而不是2?請解釋,這些++和 - 操作
var i = 1;
i = ++i + --i;
console.log(i);
我預計:
++i // i == 2
--i // i == 1
i = 1 + 1 // i == 2
哪裏出錯了?
爲什麼此代碼輸出3而不是2?請解釋,這些++和 - 操作
var i = 1;
i = ++i + --i;
console.log(i);
我預計:
++i // i == 2
--i // i == 1
i = 1 + 1 // i == 2
哪裏出錯了?
的變化:
i
(2 )i
爲左邊添加(2)i
(1)i
的是加入的右側(1)i
(3)...見到了你嘗試這樣做這讓我對JSLint爲什麼不喜歡++
和--
有所瞭解。
你的第二行是添加2 + 1
爲了,解釋器將執行:按照以下順序執行
++i // i == 2
+
--i // i == 1
i = 2 + 1
++i
等於2,`--i」等於1 2 + 1 = 3
您在操作順序上是有點過。下面是如何不言而喻:
因爲當你使用++ I I的值被遞增,然後回。但是,如果使用i ++,則返回i的值,然後遞增。 Reference
看它這樣
X =(東西)
X =(++ⅰ)+(東西)
X =(2)+(東西)
X =(2) +(--i)
X =(2)+(1)
術語被評估從左至右,一旦第一++ i的評價它不會被當改變重新評價其價值與--i。
++$a Increments $a by one, then returns $a.
$a++ Returns $a, then increments $a by one.
--$a Decrements $a by one, then returns $a.
$a-- Returns $a, then decrements $a by one.
因爲你希望這個代碼,如果這是一個參考對象,而不是收集到的值,直到一元操作完成的工作。但在大多數語言中,首先評估表達式,所以我返回i的值,而不是i本身。
如果你有++( - i),那麼你會是對的。
總之,不要這樣做。
該操作的結果在每種語言/編譯器/解釋器中沒有定義相同。所以雖然它在JavaScript中導致3
,但在其他地方可能導致2
。
搜索堆棧溢出的'++'和' - '後綴和前綴運算符 –
++ i = 2,則i = 2, - i = 1因此2 + 1 = 3因爲javascript語句是從左到右。 – Joe
由你自己的邏輯,我應該等於3. – kinakuta