Object. is()
Sprawdza, czy dwie wartości są takie same. Od === różni się tylko dla NaN oraz dla 0 i -0.
- Zwraca
true, jeśli wartości są takie same, w przeciwnym raziefalse.- Zmienia oryginał
- Nie
Przykład
#console.log(Object.is('Ania', 'Ania'))
console.log(Object.is(NaN, NaN))
console.log(NaN === NaN)
console.log(Object.is(0, -0))
console.log(0 === -0)Definicja i zastosowanie
#Metoda Object.is(a, b) zwraca true, gdy obie wartości są tą samą wartością. Działa prawie jak ===: nie zamienia typów, a obiekty porównuje przez referencję, więc dwa osobne obiekty o identycznej zawartości nie są sobie równe.
Różnice są tylko dwie. Object.is(NaN, NaN) zwraca true, choć NaN === NaN daje false. Z kolei Object.is(0, -0) zwraca false, choć 0 === -0 daje true. Ujemne zero powstaje np. przy -1 * 0 albo Math.round(-0.4). Metoda includes() oraz kolekcje Map i Set stosują porównanie pośrednie: NaN jest w nich równe NaN, a 0 i -0 też są sobie równe.
Na co dzień wystarcza ===. Object.is() przydaje się w kodzie, który musi wykryć każdą zmianę wartości, np. w bibliotekach porównujących stan. React używa właśnie tego algorytmu, żeby sprawdzić, czy nowa wartość stanu różni się od poprzedniej.
Składnia
#Object.is(value1, value2)Parametry
#value1
dowolna wartość
Pierwsza porównywana wartość.value2
dowolna wartość
Druga porównywana wartość.
Więcej przykładów
#const settings = { theme: 'dark' }
const sameSettings = settings
const copy = { ...settings }
console.log(Object.is(settings, sameSettings))
console.log(Object.is(settings, copy))const values = [Math.round(-0.4), -1 * 0, 0 / -5]
console.log(values)
console.log(values.map((value) => Object.is(value, -0)))
console.log(values.map((value) => value === 0))function hasChanged(previous, next) {
return !Object.is(previous, next)
}
const state = { points: 10 }
const mutated = state
mutated.points = 20
console.log(hasChanged(state, mutated))
console.log(hasChanged(state, { ...state, points: 30 }))
console.log(hasChanged(NaN, NaN))Zmiana pola w tym samym obiekcie nie jest wykrywana, bo referencja się nie zmieniła. Dlatego stan w React aktualizuje się nową kopią obiektu, a nie zmianą pól starego.
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
NaNczytelniejsze jestNumber.isNaN(value).Object.is()zostaw na sytuacje, w których potrzebujesz ogólnego porównania dowolnych wartości. Object.is()nie porównuje zawartości obiektów. Do tego potrzebujesz własnej funkcji porównującej pola albo gotowej funkcji z biblioteki.
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ść.
- Number.isNaN()Sprawdza, czy wartość jest dokładnie NaN.
- Array.prototype.includes()Sprawdza, czy tablica zawiera podaną wartość.
- SetKolekcja unikalnych wartości: każda wartość może wystąpić w zbiorze tylko raz.
- Spread (...)Składnia spread rozkłada tablicę, napis lub obiekt na pojedyncze elementy: do kopiowania, łączenia i przekazywania argumentów.
Widzisz błąd albo brakuje przykładu? Napisz do nas.