== и === одинаковы для объектов? - PullRequest
0 голосов
/ 07 сентября 2018

Я знаю разницу между == и === применительно к примитивным значениям. Но для объектов оба они кажутся простым сравнением идентичности.

var a = {}
var b = a
var c = {}

a == b // true
a === b // true

a == c // false
a === c // false

Есть ли ситуации, когда сравнение двух объектов даст разные результаты для каждого оператора или они функционально эквивалентны?

Ответы [ 4 ]

0 голосов
/ 07 сентября 2018

Экстра = в === гарантирует, что обе стороны одного типа. a и c оба являются объектами одного типа. Так что == или === здесь не имеет значения.

0 голосов
/ 07 сентября 2018

Ну ... === - это "сравнить тождество и тип". Вы определили, что сравниваете два объекта (поэтому «тип» - это то же самое), что оставляет «сравнивать идентичность», что совпадает с ==.

Аналогично, если вы сравните два number с, так как вы уже знаете, что они одного типа (number), === совпадает с ==. Здесь нет ничего особенного или отличного в объектах и ​​примитивах. Просто для объектов используется только тип object.

0 голосов
/ 07 сентября 2018

Да, сравнение двух объектов с == такое же, как сравнение их с ===. Так же, как сравнение двух строк с == - это то же самое, что и ===. Если тип значений одинаков, оба метода сравнения дадут одинаковый результат. Как указано в спецификации :

7.2.14 Сравнение абстрактного равенства

Сравнение x == y, где x и y являются значениями, дает истину или ложь. Такое сравнение выполняется следующим образом:

  1. Если тип (x) совпадает с типом (y), то
    • Вернуть результат выполнение сравнения строгого равенства x === y.
0 голосов
/ 07 сентября 2018

Похоже

Единственный способ, которым я знаю, чтобы «проверять равенство объектов» в javascript, - это глубоко проверять каждый возможный ключ (но даже тогда это просто проверка типа утки)

...