Немного js на сайте моего брата eCommerce вычисляет и сохраняет итоговые суммы транзакций каждый раз, когда кто-то проверяет. Периодически отрицательное значение сохраняется для tracker_total_amount. В то время как он пытается понять, почему, он решил жестко закодировать переопределение, которое должно касаться ~ 0,1% транзакций с бессмысленными значениями. Это выглядит так:
var tracker_total_amount = parseFloat(tracker.total_amount).toFixed(2);
if(tracker_total_amount < 0){
tracker_total_amount = 0;
}
Отрицательные значения продолжают отображаться в системе.
Оригинальная теория:
Я не думаю, что он должен использовать .toFixed, потому что это собирается отбросить tracker_total_amount как строку, которая, на мой взгляд, остановила бы if < 0 работает как ожидалось. Я был вполне доволен этим объяснением, пока не проверил его, и работа над ним не работала. См. Здесь: http://jsfiddle.net/yXTrz/
Новая теория:
Различные пользователи используют разные версии javascript. В некотором очень маленьком подмножестве используется древняя версия javascript, которая (вместо того, чтобы полезно преобразовывать строку в float, как моя, делает) продолжает рассматривать ее как строку и всегда оценивает tracker_total_amount как > 0, предотвращая переключение из режима.
Вопрос:
Была ли более ранняя версия javascript таким образом? Могут ли некоторые пользователи по-прежнему запускать эти старые версии? Лучше всего - есть ли способ смоделировать устаревшие версии javascript, чтобы доказать свою теорию?
Изменить: я должен указать, что все важные вещи (оплата и т.д.) зависит от вычисленного значения на стороне сервера. Номера здесь - это то, что хранится в Google Analytics, поэтому - пока можно манипулировать - результаты не будут слишком ужасными.