Javascript模运算符的行为与其他语言不同

时间:2016-11-19 10:53:27

标签: javascript division modulo

根据维基百科,n上的modulo operator(整数除法的余数)应该会产生0n-1之间的结果。

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相当于45,但负值会使其更难用作索引。

例如:

arr[x%5]
当数组长度超过python时,

始终是Ruby5中的有效表达式,但在Javascript中,这是等待发生的异常

1 个答案:

答案 0 :(得分:2)

如果通过“模数”你理解欧几里德分裂的其余部分在数学中是常见的,那么% operator不是模数运算符。它被称为余数运算符,其结果始终与被除数具有相同的符号。 (在Haskell中,rem function执行此操作。)

这种行为在编程语言中很常见,特别是在C和Java中,JavaScript的算术惯例受到启发。