2010-01-25 14 views
17

Como Which equals operator (== vs ===) should be used in JavaScript comparisons? indica que son básicamente idénticos, excepto que '===' también garantiza la igualdad de tipo y, por lo tanto, '==' podría realizar una conversión de tipo. En Douglas Crockford's JavaScript: The Good Parts, se aconseja evitar siempre '=='. Sin embargo, me pregunto cuál fue la idea original de diseñar dos conjuntos de operadores de igualdad.¿Cuándo JavaScript == tendría más sentido que ===?

¿Has visto alguna situación que con '==' en realidad es más adecuada que con '==='?

Respuesta

17

Considere una situación cuando se compara números o cadenas:

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

pero

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

una nd

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

Esto se aplica tanto a los objetos como a las matrices.

Así que en los casos anteriores, usted tiene que hacer la elección sensata si se debe utilizar o == ===

+0

No estoy preguntando la diferencia entre los dos, que se responde en 359494. Me interesa saber cuándo '==' sería especialmente adecuado. – bryantsai

+5

@bryantsai: Él te dio eso, comparando cadenas a números sin usar manualmente 'parseInt'. – Anonymous

+0

mm .. realmente no se dio cuenta de eso, gracias. – bryantsai

0

== compara si el valor de los 2 lados es el mismo o no.

=== compara si el valor y el tipo de datos de los 2 lados son iguales o no.

Digamos que tenemos

$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. 
} 

puede comprobar http://www.jonlee.ca/the-triple-equals-in-php/

+3

-1 Se trata de JavaScript y no de PHP. – Gumbo

3

Yo sugeriría que no hay ningún problema con el uso ==, pero para entender cuándo y por qué utilizarlo (es decir, use === como regla, y == cuando sirve para un propósito). Esencialmente, == sólo te da notación abreviada - (! Vble) en lugar de hacer algo así como

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

Es mucho más fácil simplemente escribir

if (vble == false) ... 

(O incluso más fácil de escribir)

si ...

Por supuesto, hay más ejemplos que solo buscar valores "truthy" o "falsey".

Realmente, sólo tiene que entender cuándo y por qué utilizar == y ===, no veo ninguna razón por la cual no utilizar == donde encaja mejor ...

Otro ejemplo es utilizar abreviaturas para permiten método abreviado llama:

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

La respuesta simple es que '==' tiene más sentido que '===' cuando se desea tipo de coacción a suceder durante las comparaciones.

Un buen ejemplo serían los números que se pasan en una cadena de consulta URL. Si, por ejemplo, tiene contenido paginado y el parámetro de consulta page contiene el número de página actual, entonces podría verificar la página actual con if (page == 1) ... aunque page es actualmente , no 1.

Cuestiones relacionadas