if (isNaN(n1) == false) {
alert("Неверный тип данных");
}
Верна ли эта запись? Сам понимаю, что скорее всего нет. Как правильно оформить проверку на тип данных на чистом js?
isNaN - это проверка преобразования объекта к числу, но не совсем проверка типа данных. Проверяется, является ли объект типом NaN (отличным от числа). В JavaScript есть другие данные, например, бесконечность ∞, обозначаемая как Infinity или NaN, когда, например, происходит попытка 0 поделить на 0.
Для проверки типа данных можно воспользоваться функцией typeof().
var n = "12";
isNaN(n); // вернет false, т.к. может значение переменной n можно преобразовать в число
(typeof n)=='string'; // вернет true
Нужно понимать, когда стоит пользоваться этой функцией. Например, нам требуется вычислить результат введенных данных пользователем. Тогда в момент проверки валидации или подсчета можем воспользоваться проверкой.
// ...
if ( isNaN(userValue) ) alert("Введенное значение не является числом. Введите данные правильно");
Попробуйте в примере ниже подставить значения в поля и посмотреть результаты:
12
5e500
Infinity
Infiniti
(Здесь тип всегда будет равен "String", т.к. берется значение с Input'a. Более точно понять тип сможете выполнив команду 'typeof ' в консоли или через alert() напрямую)
<script type="text/javascript">
function check(){
var data = document.getElementById("data").value;
if ( isNaN(data) )
alert("This is not a number");
else
alert("This is number!");
}
function gettype(){
var data = document.getElementById("data").value;
alert(typeof data);
}
</script>
<input type="text" id="data" />
<input type="button" onclick="check()" value="Проверить isNaN" />
<input type="button" onclick="gettype()" value="Получить тип" />
Попробуйте так:
if (typeof n1 !== 'number') {
alert("Неверный тип данных");
}
typeof undefined // "undefined"
typeof 0 // "number"
typeof true // "boolean"
typeof "foo" // "string"
typeof {} // "object"
typeof null // "object" (1)
typeof function(){} // "function"
Из комментариев к вопросу:
function isNumeric(val) {
if (typeof val === "number" && !Number.isNaN(val) && val !== Infinity && val !== -Infinity) {
return true;
}
return false;
}
console.log(isNumeric(10)); // true, распознает десятичные
console.log(isNumeric(0o744));// true, распознает восьмеричные
console.log(isNumeric(0xff));// true, распознает шестнадцатиричные
console.log(isNumeric(3.1415));// true, распознает с плавающей точкой
console.log(isNumeric(10e10));// true, распознает экспоненциальную запись
console.log(isNumeric(Infinity));// false, не реагирует на Infinity и -Infinity
console.log(isNumeric(NaN));// false, на NaN тоже
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости