operadores - ¿Necesita un ejemplo que explique por qué el uso de operandos de comparación!=Y== se considera una mala práctica en JavaScript
operadores de comparacion en java (7)
Como he leído en algún lugar, se recomienda utilizar! == y === en su lugar.
=== y! == Operadores.
Casi siempre es mejor usar los operadores === y !==. Los operadores == y! = Escriben coerción. En particular, no use == para comparar con los valores falsy.
De las convenciones de códigos de Douglas Crockford para el lenguaje de programación JavaScript
Vea la respuesta de Totty para obtener más información sobre esto, o lea The Elements of JavaScript Style, de Douglas Crockford, segunda parte: Modismos , que aborda los conceptos de veracidad, falsedad y coerción de tipo JavaScript con más detalle.
"Use el operador de igualdad estricta (===) cuando desee verificar que los dos operandos sean del mismo tipo y valor. Use el operador de igualdad regular (==) si solo le interesa el valor y el tipo no importa Si, por ejemplo, un operando es el número 5 y el otro operando es la cadena "5", el operador de igualdad estándar devolverá verdadero, pero, como no son del mismo tipo, un operador de igualdad estricta devolverá falso. http://www.webreference.com/js/column26/stricteq.html
Bueno, creo que el "consejo" que recibiste probablemente sea bueno, pero en realidad no es un comentario completo.
JavaScript se escribe de forma dinámica, lo que significa que las variables pueden cambiar el tipo (cadena, número, booleano) sobre la marcha y sin conversión. El analizador no se quejará si haces esto
var int = 3; // Is typeof Number
int = ''haha!''; // is typeof String
Pero, eso no quiere decir que JavaScript esté completamente ajeno al olvido. Los operadores de igualdad y desigualdad (== y! =) Comparan los valores evaluados e ignoran el tipo.
Los operadores estrictos de igualdad y estricta desigualdad (=== y! ==) SI se preocupan por el tipo. Entonces compararán el valor Y el tipo antes de determinar un valor de retorno.
Leer más aquí
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.5/guide/expr.html#1010037
Depende de lo que estás tratando de hacer.
! == y === compara el valor y el tipo.
5 == "5"
Lo anterior volverá verdadero. Si eso no es lo que pretendías, deberías hacer esto en su lugar:
5 === "5"
Eso volvería falso.
La razón básica para evitarlos es que ==
y !=
Son más caros que los operadores estrictos ===
y !==
. Esto se debe a otro problema importante, ==
y !=
Ambos realizan una conversión implícita a String si los tipos de los dos valores que se comparan son diferentes.
Un ejemplo trivial es
alerta ({toString: function () {return "1"} == 1)
Esto producirá verdadero, ya que se invocará a String en ambos valores, y luego se compararán los resultados de la cadena. En este caso particular, es obviamente absurdo, pero esto también puede ser un problema en casos más reales.
Personalmente, además de las razones excelentemente válidas que otros han declarado, solo me gusta saber que lo que estoy comparando es exactamente lo que pretendo. Para mí, la diferencia entre los siguientes es importante, a pesar de que ambos evalúan a !myVar
:
false === myVar
''undefined'' === typeof myVar
La semántica de ===
y !==
son casi siempre lo que quieres decir . Cuando comparas una primitiva con otra, quieres verificar si tienen el mismo valor. Cuando comparas un objeto con otro, quieres verificar si hacen referencia exactamente a lo mismo.
Editar: eliminó la información errónea sobre la comparación de los valores de "falsy". Simplemente diré que el operador ==
no puede distinguir null
de undefined
, o 0
de ""
, o [0]
de 0
. Sí, lo digo en serio.