@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>
  • Вопрос задан
  • 251 просмотр
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект