js. Проверка на тип данных

244
05 февраля 2019, 13:30
  if (isNaN(n1) == false) {
    alert("Неверный тип данных");
  }

Верна ли эта запись? Сам понимаю, что скорее всего нет. Как правильно оформить проверку на тип данных на чистом js?

Answer 1

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="Получить тип" />

Answer 2

Попробуйте так:

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" 
Answer 3

Из комментариев к вопросу:

  • на какой тип данных? на число?
  • Да, на число.

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 тоже

READ ALSO
Вывод меток по координатам из БД

Вывод меток по координатам из БД

Могу ли я использовать бесплатный АПИ, не нарушая пункт 4 "Условий использования API ЯндексКарт" https://tech

240
кликабельные категории в ocStore 2.3

кликабельные категории в ocStore 2.3

Хотел сделать кликабельными категории в главном меню к CMS ocStore 23

326
iPad и iPhone игнорируют overflow: hidden у html. Как исправить?

iPad и iPhone игнорируют overflow: hidden у html. Как исправить?

Есть вот такая версткаПроблема в том, что iPad и iPhone игнорируют overflow: hidden; у html

294