По сути, это расширение ответа Рафа Левиена , но я не смог уместить его в комментарии.
Я думаю, что приятно отметить, что
[] == [] || [] === [] //outputs false
Таким образом, тот факт, что
[] == Array.prototype || [] === Array.prototype //outputs false
становится ожидаемым.Чтение операторов сравнения MDN дает объяснение того, почему все четыре ситуации оцениваются как ложные:
- Два объекта строго равны, если они ссылаются на один и тот же объект.
Равен (==) - если два операнда не одного типа, JavaScript преобразует операнды, а затем применяет строгое сравнение.Если операнд является числом или логическим значением, операнды преобразуются в числа, если это возможно;иначе, если любой операнд является строкой, другой операнд преобразуется в строку, если это возможно.
Strict equal (===) - Возвращает true, если операнды строго равны (см. выше) без преобразования типов.