typeof
Zwraca napis z nazwą typu wartości, np. "number", "string" albo "object".
- Zwraca
- Napis z nazwą typu:
"undefined","boolean","number","bigint","string","symbol","function"lub"object".
Przykład
#console.log(typeof 42)
console.log(typeof 'Ania')
console.log(typeof true)
console.log(typeof undefined)
console.log(typeof { level: 1 })
console.log(typeof (() => {}))Definicja i zastosowanie
#Operator typeof sprawdza, jakiego typu jest wartość, i zwraca odpowiedź jako napis. Możliwe wyniki to: "undefined", "boolean", "number", "bigint", "string", "symbol", "function" i "object".
Przydaje się do sprawdzania argumentów funkcji i danych z zewnątrz, np. czy użytkownik naprawdę podał liczbę. Można go użyć także na niezadeklarowanej zmiennej: zwróci wtedy "undefined" zamiast błędu, dlatego służy do sprawdzania, czy dane API istnieje w środowisku.
Ma dwie znane pułapki. typeof null zwraca "object", co jest historycznym błędem języka. Tablice to też "object", więc do ich rozpoznania służy Array.isArray(). Warto też pamiętać, że NaN ma typ "number".
Składnia
#typeof operand
typeof (expression)Więcej przykładów
#console.log(typeof null)
console.log(typeof [1, 2, 3])
console.log(Array.isArray([1, 2, 3]))
console.log(typeof NaN)function addPoints(current, amount) {
if (typeof amount !== 'number' || Number.isNaN(amount)) {
return current
}
return current + amount
}
console.log(addPoints(100, 20))
console.log(addPoints(100, '20'))console.log(typeof notDeclared)
if (typeof structuredClone === 'function') {
console.log('Można użyć structuredClone()')
}Zwykły odczyt niezadeklarowanej zmiennej rzuca ReferenceError, a typeof zwraca wtedy "undefined". Wyjątkiem są zmienne let i const użyte przed deklaracją: tu nadal dostaniesz błąd.
Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Do sprawdzania
nullużywajvalue === null, a do tablicArray.isArray(value).typeofw obu przypadkach zwróci"object". - Instancje klas, np.
Dateczy Twoich własnych, rozpoznasz operatoreminstanceof.typeofzwróci dla nich po prostu"object". - Pamiętaj o priorytecie:
typeof a + bto(typeof a) + b. Aby sprawdzić typ wyniku wyrażenia, dodaj nawiasy:typeof (a + b).
Powiązane hasła
#- ===Operator ścisłej równości porównuje wartości bez konwersji typów: true daje tylko ten sam typ i ta sama wartość.
- Array.isArray()Sprawdza, czy wartość jest tablicą.
- Number.isNaN()Sprawdza, czy wartość jest dokładnie NaN.
- ?.Operator ?. (optional chaining) bezpiecznie odczytuje właściwość. Gdy obiekt to null lub undefined, zwraca undefined zamiast błędu.
- instanceofSprawdza, czy obiekt został utworzony przez daną klasę albo przez klasę, która po niej dziedziczy.
- SymbolTyp prymitywny do tworzenia unikalnych identyfikatorów, np. kluczy właściwości, które nie kolidują z innymi.
Widzisz błąd albo brakuje przykładu? Napisz do nas.