Ответ
В JavaScript различают значение (value) и идентичность (identity).
- Значение — это данные, которые хранит переменная (число, строка, булево значение и т. д.).
- Идентичность — это ссылка на объект в памяти.
Примитивы (строки, числа, булевы) сравниваются по значению:
5 === 5 // true
'hello' === 'hello' // true
Объекты (включая массивы и функции) сравниваются по идентичности (ссылки):
{} === {} // false (разные объекты в памяти)
const arr = [1, 2];
const arrCopy = arr;
arr === arrCopy // true (одна и та же ссылка)
Для глубокого сравнения объектов используют JSON.stringify() или библиотеки вроде Lodash (_.isEqual()).