2011-03-04 11 views
6

Parece que se prefiere el operador de igualdad estricta siempre que sea posible: puse mi código en JSLint y obtuve los siguientes comentarios.¿Por qué usar === cuando está seguro de que los tipos son iguales?

Código:

function log() { 
    console.log(arguments.length == 1 ? arguments[0] : arguments); 
} 

La retroalimentación de JSLint:

Problem at line 2 character 34: Expected '===' and instead saw '=='. 

Tengo curiosidad por saber qué ventajas tiene sobre ===== aquí. Básicamente, .length devuelve un Number, y 1 es un Number también. Puede estar 100% seguro, por lo que === es solo un token extra redundante. Además, verificar el tipo mientras usted sabe que los tipos siempre serán iguales tampoco tiene ninguna ventaja en el rendimiento.

¿Cuál es en realidad la razón detrás de usar === aquí?

Respuesta

4

La única razón es que no tiene que pensar si la comparación que estás haciendo implicará coacción o no. Si se limita al uso de ===, solo tiene una cosa de la que preocuparse.

Por supuesto not everyone agrees. Es por eso que puede disable specific checks en JSlint, si está seguro de lo que está haciendo.

+0

Podría ser estúpido, pero ¿podría decirme dónde la página de opciones tiene una opción para '==='/'=='? – pimvdb

+0

Er ... solía tenerlo. Se llamaba 'eqeqeq', pero ahora no puedo encontrarlo de nuevo. – Andrea

+1

eqeqeq, así como extensiones de opciones adicionales en http://jshint.com/ –

1

No es estrictamente necesario, ya que sabe que la función length está bien probada. ¿Pero qué pasaría si length fuera un poco defectuoso y existiera la posibilidad de que devuelva false?

En esta situación, tanto 0 como false se evaluarían como falsos mediante la comparación ==. Para probar la falsa (cuando también existe la posibilidad de que se devuelva 0), también debe verificar el tipo de datos, que es donde entra ===.

1

Bueno, === se supone que es infinitesimalmente más rápido, ya que puede fallar más rápido (en el tipo no coincide), pero eso se encuentra en el interior del territorio de "microoptimizaciones sin sentido".

realistas, te aconsejo para ===, incluso si está 105% seguro - Me han tropezado por mis supuestos demasiadas veces ("sí, estoy seguro de que son la misma ... ... eh ... "). A menos que haya una buena razón para desactivarlos, es mejor mantener habilitados los controles de cordura en el código que la confianza para hacerlos en su mente.

Cuestiones relacionadas