Как проверить тип данных переменной в JavaScript?
В JavaScript существует несколько способов проверки типа данных переменной. Основной способ — это использование оператора typeof. Однако для некоторых случаев (например, для массивов или null) могут понадобиться другие методы, такие как instanceof или Object.prototype.toString.
1. Оператор typeof
Оператор typeof — это самый распространенный способ для проверки типов примитивных значений в JavaScript. Он возвращает строку, представляющую тип данных.
Пример:
let number = 42;
let string = 'Hello, World!';
let boolean = true;
let object = { name: 'Alice' };
let array = [1, 2, 3];
console.log(typeof number);  // 'number'
console.log(typeof string);  // 'string'
console.log(typeof boolean); // 'boolean'
console.log(typeof object);  // 'object'
console.log(typeof array);   // 'object' (неявно указывает на тип массива)
Важно отметить, что оператор typeof возвращает 'object' как для объектов, так и для массивов, и даже для null. Это может сбить с толку, так как null — это не объект, но это результат исторического бага в языке.
Пример с null:
let x = null;
console.log(typeof x);  // 'object' — это известная особенность языка
2. Проверка массива с помощью Array.isArray()
Если нужно точно определить, является ли переменная массивом, лучше использовать метод Array.isArray(), так как typeof для массива возвращает 'object'.
Пример:
let array = [1, 2, 3];
let notArray = { name: 'Alice' };
console.log(Array.isArray(array));  // true
console.log(Array.isArray(notArray)); // false
3. Метод instanceof
Для проверки, является ли объект экземпляром конкретного класса (например, массив, объект Date и т. д.), можно использовать оператор instanceof.
Пример:
let date = new Date();
let array = [1, 2, 3];
console.log(date instanceof Date);   // true
console.log(array instanceof Array); // true
Этот метод проверяет, принадлежит ли объект к определенному типу, используя цепочку прототипов.
4. Метод Object.prototype.toString.call()
Для более точной и универсальной проверки типа данных (особенно для массивов, дат и других встроенных объектов) можно использовать метод Object.prototype.toString.call(). Этот метод возвращает строку в формате "[object Type]", где Type — это конкретный тип объекта.
Пример:
let array = [1, 2, 3];
let date = new Date();
let regex = /abc/;
let obj = { name: 'Alice' };
console.log(Object.prototype.toString.call(array));  // '[object Array]'
console.log(Object.prototype.toString.call(date));   // '[object Date]'
console.log(Object.prototype.toString.call(regex));  // '[object RegExp]'
console.log(Object.prototype.toString.call(obj));    // '[object Object]'
Этот метод особенно полезен для проверки встроенных объектов, таких как массивы, регулярные выражения, и даты.
5. Сводка по методам проверки типов:
| Метод | Применение | Пример | 
|---|---|---|
typeof | Проверка базовых типов (число, строка, булево) | typeof 'Hello' → 'string' | 
Array.isArray() | Проверка массива | Array.isArray([1, 2, 3]) → true | 
instanceof | Проверка принадлежности объекту/классу | [1, 2] instanceof Array → true | 
Object.prototype.toString.call() | Точная проверка типа объекта (массив, дата, и т. д.) | Object.prototype.toString.call([]) → '[object Array]' | 
Заключение
Выбор метода для проверки типа данных зависит от задачи. Для примитивных типов, таких как строки, числа и булевы значения, достаточно использовать typeof. Для массивов — лучше использовать Array.isArray(), а для точной проверки сложных объектов и встроенных типов — Object.prototype.toString.call().