2012-09-27 19 views
11

codifiqué lo siguiente:¿Por qué JSLint me dice que use "=== undefined" en lugar de "typeof ... === 'undefined'"?

showTitles = (typeof showTitles !== 'undefined') ? showTitles : 'Y'; 
showSelectGroup = (typeof showSelectGroup !== 'undefined') ? showSelectGroup : 'Y'; 

Pero JSLint está diciendo:

Warning 3 JS Lint: Unexpected 'typeof'. Use '===' to compare directly with undefined.

¿Cómo debo cambiar mi código?

+2

No sé nada sobre jslint, pero creo que te dice que hagas esto: '(showtitles === undefined)'. – Travesty3

+1

Lo dice en el mensaje: 'Use '===' para comparar directamente con undefined'. –

+0

El problema es 'inesperado' typeof'', no el '! =='. – Blazemonger

Respuesta

6

Nota que si esta es la mejor práctica en general es discutible, pero si quieres que funcione con JSLint, puedes hacer esto

showTitles = (showTitles !== undefined) ? showTitles : 'Y'; 
+0

Entonces, ¿no necesito typeof? –

+1

@Marilou no si está usando una comparación estricta. Una vez dicho esto, me gustaría alentar la investigación sobre eso y decidir si quieres hacer las cosas de esa manera para ti y no solo seguir ciegamente el "consejo" de JSLint. –

+0

En el nodo obtengo: "ReferenceError: showTitles no está definido" –

8

Probablemente utilizando

showTitles = (showTitles === undefined) ? 'Y' : showTitles; 
showSelectGroup = (showSelectGroup === undefined) ? 'Y' : showSelectGroup; 

JSLint no tiene problemas con eso (suponiendo showTitles y showSelectGroup son declaradas con var)

Sin embargo, me gustaría escribir como

var showTitles = showTitles || 'Y'; 
var showSelectGroup = showSelectGroup || 'Y'; 
5

Este mensaje refleja las mejores prácticas más recientes. A partir del modo estricto de ES5, el valor global de undefinedcan no longer be changed y una comparación directa es un código más simple y más rápido. En resumen, JSLint is aware of all this, y te está dando buenos consejos.

En este caso, cambie typeof showTitles !== 'undefined' a showTitles === undefined.

Cuestiones relacionadas