Почему в javascript для Множество:
console.info([1] == [1])
вернуть ложь?
Есть ли в нем автоматическая смена типа? И [1] === [1] тоже возвращает false?
@KrishnaPrashatt - Это прямо в вопросе.
@Thilo - Да, я собирался сказать, что это по крайней мере связанные с. Вам нужно будет довольно внимательно прочитать, чтобы извлечь из этого часть Зачем ... Но должен быть дублирующий целевой объект с Зачем ...
@Thilo - Нашел. :-)
Также: stackoverflow.com/questions/34102957/…
@Thilo - Это намного чище. :-)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Потому что два отдельных объекта никогда не являются == (или ===) по отношению друг к другу, даже если они являются эквивалент (имеют одинаковые свойства с одинаковыми значениями). Массивы - это объекты.
Чтобы сравнить массивы, см. ответы на этот вопрос.
Потому что вы сравниваете два Array objects.
Если вы хотите сравнить значения массивов, вы можете сделать:
console.info([1] == [1]);
console.info(compareTwoArray([1], [1]));
console.info(compareTwoArray([1], [2]));
function compareTwoArray(arr1, arr2) {
return arr1.length === arr2.length && arr1.every(x => arr2.includes(x));
}Представьте, что у вас есть машина, а у вашего соседа точно такая же модель.
Если вы хотите строго сравнивать автомобили, можете ли вы просто посмотреть на модель? Нет, вам нужно будет посмотреть на каждую часть автомобиля (двигатель, колеса ...), чтобы сказать, что они «одинаковые».
Это не одно целое, это две отдельные машины, но для вас их характеристики делают их идентичными.
Итак, [1] - это массив, а [1] и другой массив. Но если посмотреть на их ценности, можно сказать, что они идентичны.
Но почему? object конвертировать в хэш при сравнении?
В Javascript массивы - это объекты
typeof [1] // object
Это означает, что когда вы пишете [1], вы создаете новый объект. Поскольку объекты не являются одним и тем же объектом, вы не можете проверить их равенство с == или ===.
См. https://gomakethings.com/checking-if-two-arrays-are-equal/, чтобы узнать о некоторых способах проверки равенства массивов.
Сравнение двух объектов, даже если они идентичны друг другу, вернет false независимо от того, используете ли вы == или ===.
Для сравнения двух объектов используйте JSON.stringify(object)
conole.log(JSON.stringify([1])==JSON.stringify([1]))Это вернет true
Если вам нужно несколько сравнений, вы можете установить JSON.stringify в переменную:
let i = JSON.stringify
тогда вам это нравится:
let i = JSON.stringify
conole.log(i([1]) == i([1]))
conole.log(i([1]) === i([1]))Объекты (массивы являются объектами) не совпадают, вы фактически сравниваете их адреса из памяти, и, поскольку они являются разными экземплярами, они не равны.
кстати, что касается примитивов, вы сравниваете фактические значения (а не адрес)
имеет будет дублирующей целью для этого ...