Równość tablic i obiektów w JavaScript

Dec 13 2022
W JavaScript podwójny znak równości (==) i potrójny znak równości (===) lub ścisła równość to dwa operatory używane do sprawdzania równości dwóch wartości. Pamiętamy, że podwójny znak równości, w przeciwieństwie do potrójnego znaku równości, sprawdza tylko równość dwóch wartości, ale nie dba o to, czy są one tego samego typu.

W JavaScript podwójny znak równości (==) i potrójny znak równości (===) lub ścisła równość to dwa operatory używane do sprawdzania równości dwóch wartości. Pamiętamy, że podwójny znak równości, w przeciwieństwie do potrójnego znaku równości, sprawdza tylko równość dwóch wartości, ale nie dba o to, czy są one tego samego typu. Na przykład:

// double equality
const num = 2
const num2 = '2'
console.log(2==2)

// output will be true

// triple equality
const num = 2
const num2 = '2'
console.log(2===2)

// output will be false

Ale kiedy zastosujemy którykolwiek z tych znaków na tablicy lub obiekcie, zachowanie staje się dziwne. Na przykład:

const obj1={
 name: 'kenneth',
country:'Nigeria',
age:26
}
const obj2={
 name: 'kenneth',
country:'Nigeria',
age:26
}
console.log(obj1 == obj2)
//this outputs false
console.log(obj1 === obj2)
// this still outputs false

Powodem jest to, że zmienne obiektów i tablic nie przechowują bezpośrednio przypisanych im wartości, ale raczej przechowują odniesienie do oryginalnego miejsca w pamięci, w którym przechowywana jest tablica lub obiekt. Spójrz na poniższy schemat dla właściwego zrozumienia:

Jak widać na powyższym obrazku, zmienna „obj1” przechowuje odniesienie do pamięci, w której przechowywany jest rzeczywisty obiekt, którym w tym przypadku jest 12456754 (wymyśliłem tę liczbę w celu wyjaśnienia) tak samo jak zmienna „obj2” która przechowuje również odniesienie do pamięci, w której przechowywany jest rzeczywisty obiekt, czyli 98537562. Widzimy, że wartość przechowywana w obj1 (12456754) różni się od wartości przechowywanej w obj2 (98537562). Prawidłowo można to zapisać tak:

const obj1 = 12456754;
const obj2 = 98537562;

Jedynym sposobem, w jaki dwa obiekty lub zmienne tablicowe mogą być takie same, jest tylko wtedy, gdy zrównamy lub przypiszemy nową zmienną (obj2) do tablicy lub zmiennej obiektowej (obj1). Na przykład:

const obj1={
 name: 'kenneth',
country:'Nigeria',
age:26
}
const obj2 = obj1;

console.log(obj1 == obj2)
// this will output true
console.log(obj1 === obj2)
// this will still be true

Uwaga: w moich przykładach użyłem tylko obiektów, ale ten sam powód i wyjaśnienie nadal dotyczy tablic.