Во время испытания кода на этой неделе мне дали задание добавить прослушиватель событий к кнопке «купить билеты», который уменьшал количество билетов, доступных для определенного фильма, до тех пор, пока фильм не был распродан. На первый взгляд, это казалось относительно простым для кодирования. Просто возьмите переменную, представляющую количество доступных билетов, и уменьшите ее. Я написал свой код, делая именно это, он работал именно так, как ожидалось, и я перешел к следующему результату. Мой код работал просто отлично, и я прошел.

Однако при рассмотрении задачи с моим инструктором я вспомнил о ключевом факторе манипуляций с DOM и файлами json… JSON возвращает объект в виде строки, то есть числа, с которыми я работал, были сохранены в виде строк.

Хотя во многих (фактически, почти во всех) случаях Javascript справляется со строками чисел именно так, как мы ожидаем, что он будет обрабатывать числа, есть пара случаев, когда он действительно может быть сбит с толку.

В моем коде я просто уменьшал свою переменную каждый раз, когда нажимали кнопку, пока оставшееся количество не достигало 0. Из-за этого мой код, принимая строку чисел, возвращал ожидаемое значение.

Javascript хорош для нас, как это. Он делает предположения о том, что мы хотим, чтобы он делал с данными, и довольно последовательно делает свои предположения правильными.

Иногда, однако, это становится немного запутанным, если мы не совсем ясны.

Скажем, мы хотим добавить 10 + 7. Если мы храним эти значения в виде чисел, мы в чистоте.

Но что, если мы сохраним их в виде строк?

Хм… не совсем.

Такие мелкие нюансы новичку легко забыть. Мой код выполнял то, что нужно, поэтому я никогда не задумывался об этом, пока мой инструктор не рассмотрел свое собственное кодовое решение. Если бы мы не обсудили это, я, вероятно, продолжал бы кодировать в том же духе и впал бы в тупик, когда дошел до случая, когда я пытался добавить что-то вроде «10» + «7» и получил 107.

Вот почему так невероятно важно быть усердным в нашем коде и следить за тем, чтобы наши данные хранились в правильном формате.

К счастью, в данном случае это так же просто, как быстрый parseInt() наших строк JSON.