Операторы равенства (===
и !==
) сравнения ссылки, а не значения в случае объектов. Имейте в виду, что в JavaScript Массивы являются объектами. Из-за этого и потому что эти два различных массивов (они выглядят одинаково, они содержат одни и те же ценности, но они не тот же массив) их ссылки отличаются:
Если оба операнда являются объектами, то JavaScript сравнивает внутренние ссылки, которые равны, когда операнды относятся к одному и тому же объекту в памяти.
Подробнее об этом можно узнать на странице MDN.
Примечание:==
и !=
операторы равенства и сравнения объектов по ссылкам, но так как они делают больше, чем просто простое сравнение (и это часто неожиданные), это вообще не рекомендуется использовать их и всегда придерживаться строгих операторов равенства (===
и !==
).
Как сравнить массивы тогда?
Существует по крайней мере несколько разных методов. Некоторые люди советуют сравнивать JSON.stringify
из обоих массивов, но, хотя это работает для простых случаев, это не очень хорошее решение по производительности. Здесь вы можете найти лучшие методы. https://stackoverflow.com/a/14853974/704894
Если вы используете какую-либо полезную библиотеку, такую как lodash
или underscore
, эта функция уже есть! См. https://lodash.com/docs#isEqual
http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript –
Вы можете легко написать функцию сравнения массива. –
Вы не можете сравнивать такие массивы, потому что массивы - это объекты. И когда вы используете оператор сравнения над объектом, его ссылка будет сравниваться и результат сравнения будет возвращен. –