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