Почему проверка на typeof не проходит

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2023

Занимаюсь по MDN и попалась задачка на то чтобы проверить то что введёная информация является строкой. Приведён пример

if (isNaN(num)) {

Но почему пример

if (typeof num === 'string') {

не работает?

const input = document.querySelector('.numberInput');
const para = document.querySelector('p');

function squared(num) {
  return num * num;
}

function cubed(num) {
  return num * num * num;
}

function factorial(num) {
  var x = num;
  while (x > 1) {
    num *= x-1;
    x--;
  }
  return num;
}

input.onchange = function() {
  var num = input.value;
  if (isNaN(num)) {
    para.textContent = 'You need to enter a number!';
  } else {
    para.textContent = num + ' squared is ' + squared(num) + '. ' +
                       num + ' cubed is ' + cubed(num) + '. ' +
                       num + ' factorial is ' + factorial(num) + '.';
  }
}
input {
  font-size: 2em;
  margin: 10px 1px 0;
}
<input class="numberInput" type="text">
<p></p>

Ответы

▲ 0

В вашем случае, проверка на тип данных, что введенное значение строка избыточно, т.к. input type='text' возвращает строку

Вам надо проверять как раз на то что введенное значение конвертируется в число, перед этим убрав пробелы(они преобразуются в 0)

const para = document.querySelector('p');

    document.querySelector('.numberInput').addEventListener('input', function (event) {
        const num = event.target.value.trim();
        para.textContent = (!num && !isNaN(num)) ?
            'Введенное значение не число!' :
            `Для числа ${num}: Квадарат: ${squared(num)}, Куб: ${cubed(num)}, Факториал: ${factorial(num)}`
    })

    function squared(num) {
        return num * num;
    }

    function cubed(num) {
        return squared(num) * num;
    }

    function factorial(num) {
        if (num < 1) return 0;
        if (num === 1) return num;
        return num * factorial(num - 1);
    }
<input class="numberInput" type="text">
<p></p>