@olya_097

Для чего if (chr == null) и почему мы пишем if (chr < '0' || chr > '9'), а не if (chr < 0 || chr > 9) и в чем суть?

1) Для чего if (chr == null)

2) почему мы пишем if (chr < '0' || chr > '9'), а не if (chr < 0 || chr > 9) и в чем суть?

3) для чего данная строка и зачем условие e = e || event;

Введите ваш возраст:
  <input type="text">


  <script>
    document.getElementsByTagName('input')[0].onkeypress = function(e) {

      e = e || event;

      if (e.ctrlKey || e.altKey || e.metaKey) return;

      var chr = getChar(e);

    
      if (chr == null) return;

      if (chr < '0' || chr > '9') {
        return false;
      }

    }

    function getChar(event) {
      if (event.which == null) {
        if (event.keyCode < 32) return null;
        return String.fromCharCode(event.keyCode) // IE
      }

      if (event.which != 0 && event.charCode != 0) {
        if (event.which < 32) return null;
        return String.fromCharCode(event.which) // остальные
      }

      return null; 
    }
  </script>
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
1) if (chr < '0' || chr > '9') {
проверяется ввод пользователем цифр. То есть проверяются не числа, а символы (character)

2) e = e || event;
если е не пустой (не null), то ничего не происходит, если пустой, то он теперь event

3) if (chr == null)
если символ пустой - то выходим из функции
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
https://learn.javascript.ru/comparison#sravnenie-strok
null < '2' вернет true, для того, чтобы такое сравнение не выполнялось и поставили
if (chr == null) return;
Ответ написан
@nonamemovich
2) почему мы пишем if (chr < '0' || chr > '9'), а не if (chr < 0 || chr > 9) и в чем суть
Численное преобразование происходит в математических функциях и выражениях, а также при сравнении данных различных типов (кроме сравнений ===, !==)
https://learn.javascript.ru/types-conversion
https://habr.com/company/ruvds/blog/347866/
так что вы правы. Просто в данном случае if (chr < '0' || chr > '9') отработает корректно. Имхо, лучше всё-таки учитывать преобразование различных типов при сравнении.

3) для чего данная строка и зачем условие e = e || event;
e = e || event;
~
e = e || window.event;
если event не был явно определён выше. Т.е. допустим так
var event = new Event('keypress');
document.getElementsByTagName('input')[0].onkeypress = function(e) {
      e = e || event;
...

event == window.event; e!=event;
и код будет работать не совсем корректно.
через window.event также можно получить объект события. (javascript.ru/tutorial/events/properties здесь такой же код используется)
Имхо, опять же, присваивание e = e || event; не нужно и корректно работает только в текущей ситуации. Функция обработчик даже в чистом js всегда с event во входных параметрах. Даже если в функции явно не задана переменная для входящего объекта события, его можно получить через arguments.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы