Когда JavaScript == имеет больше смысла, чем ===? - PullRequest
17 голосов
/ 25 января 2010

Как Какой оператор равенства (== vs ===) должен использоваться в сравнениях JavaScript? указывает, что они в основном идентичны, за исключением того, что * === также обеспечивает равенство типов и, следовательно, == может выполнить преобразование типа. В JavaScript: The Good Parts Дугласа Крокфорда рекомендуется всегда избегать '=='. Однако мне интересно, какова была первоначальная мысль о разработке двух наборов операторов равенства.

Видели ли вы ситуацию, когда использование '==' на самом деле более подходит, чем использование '==='?

Ответы [ 4 ]

17 голосов
/ 25 января 2010

Рассмотрим ситуацию, когда вы сравниваете числа или строки:

if (4 === 4)
{
  // true
}

но

if (4 == "4")
{
  // true
}

и

if (4 === "4")
{
  // false
}

Это относится как к объектам, так и к массивам.

Так что в вышеприведенных случаях вы должны сделать разумный выбор: использовать == или ===

5 голосов
/ 25 января 2010

Простой ответ заключается в том, что '==' имеет больше смысла, чем '===', когда вы хотите, чтобы во время сравнения происходило принуждение типа .

Хорошим примером будут числа, передаваемые в строке запроса URL. Например, если у вас есть постраничное содержимое, а параметр запроса page содержит номер текущей страницы, вы можете проверить текущую страницу с помощью if (page == 1) ..., хотя page на самом деле "1", а не 1.

3 голосов
/ 25 января 2010

Я хотел бы предположить, что нет проблем с использованием ==, но чтобы понять, когда и зачем его использовать (т.е. используйте === как правило и ==, когда это служит цели). По сути, == просто дает вам сокращенную запись - вместо того, чтобы делать что-то вроде

if (vble === 0 || vble === "" || vble === null || vble === undefined || vble === false) ...

Гораздо проще просто написать

if (vble == false) ...

(или даже проще написать)

if (! Vble) ...

Конечно, есть больше примеров, чем просто поиск «истинных» или «ложных» значений.

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

Другой пример - использование этого сокращения для разрешения сокращенных вызовов методов:

function func(boolOptionNotCommonlyUsed) {
  if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true
    //do something we rarely do
  }
  //do whatever func usually does
}

func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without "false" as an arg
0 голосов
/ 25 января 2010

== сравнивает, являются ли значения двух сторон одинаковыми или нет.

=== сравнивает, являются ли значение и тип данных двух сторон одинаковыми или нет.

Скажем, у нас есть

$var = 0;

if($var == false){
  // true because 0 is also read as false
}

if(!$var){
  // true because 0 is also read as false
}

if($var === false){
  // false because 0 is not the same datatype as false. (int vs bool)
}

if($var !== false){
  // true becuase 0 is not the same datatype as false. (int vs bool)
}

if($var === 0){
  // true, the value and datatype are the same.
}

Вы можете проверить http://www.jonlee.ca/the-triple-equals-in-php/

...