Почему для массива javascript [1] == [1] возвращает false?

Почему в javascript для Множество:

console.info([1] == [1])

вернуть ложь?

Есть ли в нем автоматическая смена типа? И [1] === [1] тоже возвращает false?

имеет будет дублирующей целью для этого ...

T.J. Crowder 16.05.2018 14:56

@KrishnaPrashatt - Это прямо в вопросе.

T.J. Crowder 16.05.2018 14:56

@Thilo - Да, я собирался сказать, что это по крайней мере связанные с. Вам нужно будет довольно внимательно прочитать, чтобы извлечь из этого часть Зачем ... Но должен быть дублирующий целевой объект с Зачем ...

T.J. Crowder 16.05.2018 14:58

@Thilo - Нашел. :-)

T.J. Crowder 16.05.2018 15:00

Также: stackoverflow.com/questions/34102957/…

Thilo 16.05.2018 15:01

@Thilo - Это намного чище. :-)

T.J. Crowder 16.05.2018 15:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
62
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Потому что два отдельных объекта никогда не являются == (или ===) по отношению друг к другу, даже если они являются эквивалент (имеют одинаковые свойства с одинаковыми значениями). Массивы - это объекты.

Чтобы сравнить массивы, см. ответы на этот вопрос.

Потому что вы сравниваете два 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 конвертировать в хэш при сравнении?

sinbar 16.05.2018 14:58

В 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]))

Объекты (массивы являются объектами) не совпадают, вы фактически сравниваете их адреса из памяти, и, поскольку они являются разными экземплярами, они не равны.

кстати, что касается примитивов, вы сравниваете фактические значения (а не адрес)

Другие вопросы по теме