Jak sprawdzić, czy obiekt jest pusty?
sobes.tech AI
Odpowiedź od AI
Obiekt jest uważany za "pusty", jeśli nie ma własnych właściwości enumerowalnych.
Sposoby sprawdzania:
-
Object.keys(): Zwraca tablicę łańcuchów reprezentujących nazwy własnych właściwości enumerowalnych obiektu. Jeśli tablica jest pusta, obiekt jest pusty.const myObject = {}; if (Object.keys(myObject).length === 0) { // Obiekt jest pusty } -
for...inihasOwnProperty(): Iteruje po enumerowalnych właściwościach obiektu (w tym odziedziczonych) i sprawdza, czy właściwość jest własna.const myObject = {}; let isEmpty = true; for (const key in myObject) { if (Object.prototype.hasOwnProperty.call(myObject, key)) { isEmpty = false; break; } } if (isEmpty) { // Obiekt jest pusty }Object.prototype.hasOwnProperty.call()jest używane dla bezpieczniejszej weryfikacji, ponieważhasOwnPropertymogło zostać nadpisane na obiekcie. -
JSON.stringify(): Konwertuje obiekt na łańcuch JSON. Pusty obiekt{}jest konwertowany na łańcuch"{}"const myObject = {}; if (JSON.stringify(myObject) === '{}') { // Obiekt jest pusty }Metoda ta jest odpowiednia dla prostych obiektów bez funkcji i cyklicznych odwołań.
-
Object.getOwnPropertyNames(): Zwraca tablicę wszystkich własnych (nie odziedziczonych), enumerowalnych i nieenumerowalnych właściwości (w tym symboli).const myObject = {}; if (Object.getOwnPropertyNames(myObject).length === 0) { // Obiekt jest pusty } -
Object.getOwnPropertySymbols(): Zwraca tablicę wszystkich własnych symbolicznych właściwości obiektu. Jeśli obiekt jest pusty (i nie ma symbolicznych właściwości), ta tablica będzie pusta.const myObject = {}; if (Object.getOwnPropertySymbols(myObject).length === 0 && Object.getOwnPropertyNames(myObject).length === 0) { // Obiekt jest pusty, w tym symboliczne właściwości }
Wybór metody zależy od kontekstu i wymagań dotyczących wydajności. Object.keys() i JSON.stringify() są zazwyczaj najszybsze i najbardziej zwięzłe dla prostych przypadków. Aby uwzględnić wszystkie typy właściwości i odziedziczone właściwości, mogą być potrzebne dodatkowe sprawdzenia.