Ответ 1
Вы можете попробовать следующее: p -
Number.prototype.mod = function(n) {
return ((this % n) + n) % n;
}
Отъезд this
Я пытаюсь перебрать массив объектов jQuery, увеличивая или уменьшая на 1. Итак, для декрементирующей части я использую этот код:
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;
}
Отъезд this
Большинство языков, которые наследуют от C, вернут отрицательный результат, если первый операнд по модулю отрицательный, а второй положительный. Я не знаю, почему это решение было принято изначально. Вероятно, ближе всего к тому, что процессоры в то время делали в сборке. В любом случае, с тех пор ответ на "почему", скорее всего, "потому что это то, что программисты, знающие" С ", ожидают".
Ссылка MDC содержит указатель на предложение ввести надлежащее мод. Но даже это сохранит существующий оператор %
(который они называют "остатком", чтобы лучше различать их) и ввести новую нотацию инфиксного слова a mod b
. Предложение датируется 2011 годом, и я не знаю последних событий в этом направлении.