Почему проверка на typeof не проходит
Занимаюсь по 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>
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
В вашем случае, проверка на тип данных, что введенное значение строка избыточно, т.к. 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>