Сравните Object и Boolean дает разные результаты, используя `! =` И `==` - PullRequest
0 голосов
/ 23 ноября 2018

У меня проблемы с пониманием поведения оператора равенства в JavaScript.Вот что я получаю, когда запускаю на консоли браузера следующие команды:

new Object() == true  // returns false
new Object() != false // returns true

Теперь я не согласен с тем фактом, что объект должен быть ложным (хотя я понял почему после проверки Спецификации языка ECMAScript ), но меня действительно беспокоит то, что я получаю два разных результата для двух эквивалентных логических выражений.

Что происходит?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Согласно спецификации, оба из них должны возвращать false (это соответствует здравому смыслу для меня):

new Object() == true  // false
new Object() == false // false

на основе:

Если тип (x) равен объекту, а тип (y) равен либо строковому, либо числовому, возвращает результат сравнения ToPrimitive (x) == y.

Возврат false.

Так как оба возвращают false и:

A! = Bэквивалентно! (A == B).

оба они должны быть true:

new Object() != true  // true
new Object() != false // true

примечание: Это не следует путать с правдивостью new Object().Другими словами new Object() == true не то же самое Boolean(new Object()) == true

0 голосов
/ 23 ноября 2018

Вы связались с этим , который дает список из 10 шагов, которые нужно проверить, основываясь на левой и правой частях.

Левая сторона - это объект.Правая часть - логическое значение.

Это означает, что оно достигает шага 10:

Возвращает false.

Объект не равенtrue и не равно false.

...