0
根據維基百科的說法,modulo operator(整數除法的其餘部分)應在0
和n-1
之間產生一個結果。Javascript modulo operator與其他語言的行爲不同
這確實是python
的情況:
print(-1%5) # outputs 4
在Ruby
:
puts -1%5 # outputs 4
在Haskell
main = putStrLn $ show $ mod (-1) 5
但Javascript
:
console.log(-1%5);
結果是-1
!!
這是爲什麼?這個設計決策背後有邏輯嗎?
雖然-1
等於4
模5
,負值使得它很難用作索引。
例如:
arr[x%5]
將總是在python
和Ruby
有效的表達式當陣列長度大於5
,但在Javascript
,這是等待發生異常。
您參考維基百科,但它明確規定'當任一或n是負的,天真的定義分解和編程語言中這些值是如何defined.'不同,因此它不喜歡預設電臺語言違反了它,你還聲稱。 – vlaz
很明顯,情況就是這樣,問題是爲什麼? –
另外我不明白'arr [x%5]'是JS中的一個等待發生的異常 - 如果你傳遞一個負數,你會得到一個負面的結果,所以你會得到'undefined' 。如果操作符確實像Python或其他任何工作,那麼它會給你一個數組中的_random_元素。所以你可能有一個bug,直到後來才找到它,因爲它看起來像它的作品。 – vlaz