Разница между == и === в JavaScript

1434

Возможный дубликат:
Javascript === vs ==: Имеет ли значение, какой оператор "равный" я использую?

В чем разница между == и === в JavaScript? Я также видел операторы != и !==. Есть ли еще такие операторы?

Показать ещё 1 комментарий
Теги:
comparison-operators
equality-operator
identity-operator

2 ответа

1039
Лучший ответ

=== и !== являются строгими операторами сравнения:

JavaScript имеет как строгое, так и типовое преобразование равенства. Для strict равенства сравниваемые объекты должны иметь один и тот же тип и:

  • Две строки строго равны, если они имеют одну и ту же последовательность символов, одну и ту же длину и одинаковые символы в соответствующих позициях.
  • Два числа строго равны, если они численно равны (имеют одинаковое числовое значение). NaN не равно никому, включая NaN. Положительные и отрицательные нули равны друг другу.
  • Два булевых операнда строго равны, если оба они истинны или оба ложны.
  • Два объекта строго равны, если они относятся к одному и тому же Object.
  • Null и Undefined типы == (но не ===). [Ie (Null==Undefined) true но (Null===Undefined) false ]

Операторы сравнения - MDC

  • 4
    Итак, если я сделаю, например: if (input == null) ... , будет ли оно также выполнено условие, когда input не определен?
  • 5
    Вышеприведенное звучит так, как будто сравнение == не проверит все вещи в первом пункте маркера, «одинаковую последовательность символов, одинаковую длину и одинаковые символы в соответствующих позициях», но на самом деле это так. Насколько я могу судить, единственная реальная разница при сравнении двух строк состоит в том, что с === new String()===new String() возвращает false (различные ссылки на объекты). Но new String следует избегать в любом случае.
Показать ещё 3 комментария
1699

Посмотрите здесь: http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html

3 равных знака означают "равенство без принуждения типа". Используя тройное равенство, значения также должны быть равны по типу.

0 == false   // true
0 === false  // false, because they are of a different type
1 == "1"     // true, automatic type conversion for value only
1 === "1"    // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
  • 79
    Спасибо за четкий ответ! Я думаю, что по сравнению с C # == также будет == и === будет переводиться в .Equals ()
  • 12
    насчет "new String () === new String ()", значения и типы одинаковы. Но утверждение возвращает ложь.
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню