У меня большая и запутанная кодовая база JS. Иногда, когда приложение используется, переменной присваивается значение NaN. Поскольку x = 2 + NaN
приводит к тому, что x
устанавливается в NaN, NaN распространяется вирусно. В какой-то момент, после того, как он распространился довольно далеко, пользователь замечает, что NaN повсюду, и дерьмо, как правило, больше не работает. Из этого состояния мне очень трудно вернуться назад и определить источник NaN (и вполне может быть несколько источников).
Ошибка NaN также не легко воспроизводима. Несмотря на то, что сотни людей наблюдают за этим и сообщают мне об этом, никто не может назвать мне набор шагов, которые приводят к появлению NaN. Может быть, это редкое состояние гонки или что-то в этом роде. Но это определенно редкость и неизвестное происхождение.
Как я могу исправить эту ошибку? Любые идеи?
Я подумал о двух глупых идеях, которые могут оказаться неосуществимыми:
Напишите какой-нибудь препроцессор, который вставляет
isNaN
проверок перед каждым использованием любой переменной и регистрирует первое появление NaN. Я не думаю, что это было сделано раньше, и я не знаю, насколько это будет сложно. Любой совет будет принят во внимание.Запустите мой код в движке JS, который может установить точку останова в любое время, когда для любой переменной установлено значение NaN. Я не думаю, что что-то делает это из коробки, но насколько сложно будет добавить его в Firefox или Chrome?
Я чувствую, что я не должен быть первым, у кого есть такая проблема, но я не могу найти никого, кто бы говорил об этом.
debugger;
перед ним. Илиif (isNaN(x)) {debugger;}
- который будет работать по крайней мере в хроме, возможно, и в других браузерах. По сути, это условная точка останова. - person amenthes   schedule 28.10.2014