Оператор typeof у JavaScript
Що таке typeof?
Оператор typeof повертає рядок, що вказує на тип операнду. Це найпростіший спосіб перевірити тип значення під час виконання програми.
Результати typeof
javascript
typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol("id"); // "symbol"
typeof 42n; // "bigint"
typeof function(){}; // "function"
typeof {}; // "object"
typeof []; // "object" ⚠️
typeof null; // "object" ⚠️ (історичний баг)
typeof NaN; // "number" ⚠️Повна таблиця посилань
| Значення | Результат typeof |
|---|---|
42, 3.14, NaN, Infinity | "number" |
"hello", 'world', \template`` | "string" |
true, false | "boolean" |
undefined | "undefined" |
null | "object" ⚠️ |
Symbol() | "symbol" |
42n | "bigint" |
{}, [], new Date() | "object" |
function(){} | "function" |
Загальні підводні камені
typeof null === "object"
javascript
typeof null; // "object" — це відомий баг з моменту створення JavaScript
// ✅ Правильна перевірка на null
value === null;
value == null; // перевіряє як null, так і undefinedМасиви є "об'єктами"
javascript
typeof []; // "object"
// ✅ Перевірка на масиви
Array.isArray([]); // true
[] instanceof Array; // true
Object.prototype.toString.call([]); // "[object Array]"NaN є "числом"
javascript
typeof NaN; // "number"
// ✅ Перевірка на NaN
Number.isNaN(NaN); // true
Number.isNaN("hello"); // false (не приводить до числа)
isNaN("hello"); // true ⚠️ (спочатку приводить до числа)Краща перевірка типів
Object.prototype.toString.call()
javascript
Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("str"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(/regex/); // "[object RegExp]"
Object.prototype.toString.call(new Map()); // "[object Map]"Практична утиліта для перевірки типу
javascript
function getType(value) {
if (value === null) return "null";
if (Array.isArray(value)) return "array";
return typeof value;
}
getType(null); // "null"
getType([]); // "array"
getType({}); // "object"
getType(42); // "number"
getType(undefined); // "undefined"typeof з неоголошеними змінними
javascript
// typeof безпечний з неоголошеними змінними
typeof undeclaredVar; // "undefined" (без помилки!)
// Без typeof — викликає помилку
console.log(undeclaredVar); // ReferenceError!Важливо:
Пам'ятайте про особливості: typeof null === "object" та typeof [] === "object". Використовуйте Array.isArray() для масивів, === null для перевірок на null, і Number.isNaN() для перевірок на NaN. Для точного визначення типу використовуйте Object.prototype.toString.call().
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.