2010-01-25 3 views
17

Как Which equals operator (== vs ===) should be used in JavaScript comparisons? указывает, что они в основном идентичны, кроме «===» также обеспечивает равенство типов и, следовательно, «==» может выполнять преобразование типов. В Douglas Crockford's JavaScript: Хорошие детали, рекомендуется всегда избегать «==». Тем не менее, мне интересно, какова была первоначальная мысль о разработке двух наборов операторов равенства.Когда JavaScript == будет иметь больше смысла, чем ===?

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

ответ

17

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

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

но

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

nd

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

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

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

+0

Я не прошу разницы между ними, на что ответили 359494. Мне интересно знать, когда '==' будет особенно подходящим. – bryantsai

+5

@bryantsai: Он дал вам это - сравнение строк с числами без ручного использования 'parseInt'. – Anonymous

+0

mm .. на самом деле не видно это, спасибо. – bryantsai

0

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

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

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

$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/

+3

-1 Речь идет о JavaScript, а не о PHP. – Gumbo

3

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

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

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

if (vble == false) ... 

(Или еще проще писать)

если ...

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

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

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

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 
5

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

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