如何在JavaScript中计算负整数的模数?

我试图通过递增或递减1迭代jQuery对象数组。因此,对于递减部分,我使用此代码:

var splitted_id = currentDiv.attr('id').split('_'); var indexOfDivToGo = parseInt(splitted_id[1]); indexOfDivToGo = (indexOfDivToGo-1) % allDivs.length; var divToGo = allDivs[indexOfDivToGo]; 

所以我有4个带id的元素:

 div_0 div_1 div_2 div_3 

我期待它迭代为3 – 2 – 1 – 0 – 3 – 2 – 等等。

但它在零之后返回-1,因此它被卡住了。 所以它迭代为:

3 – 2 – 1 – 0 – -1 – 卡住了

我知道我可以通过更改代码的第二行来修复它

 indexOfDivToGo = (indexOfDivToGo-1 + allDivs.length) % allDivs.length; 

但我想知道为什么JavaScript不计算负模型。 也许这也会帮助另一位编码员。

你可以试试这个:p-

 Number.prototype.mod = function(n) { return ((this % n) + n) % n; } 

看看这个

如果模运算的第一个操作数为负数且第二个操作数为正数,则从Cinheritance的大多数语言将返回否定结果。 我不确定为什么这个决定是最初的。 可能最接近当时处理器中的处理器。 无论如何,从那以后,“为什么”的答案很可能“因为那是那些知道C期望的程序员”。

MDC参考包含指向引入适当的mod运算符的提议的指针。 但即使这样也会保留现有的%运算符(他们称之为“余数”以更好地区分它们)并引入新的中缀词符号a mod b 。 该提案的日期是2011年,我不知道最近这方面的发展情况。