2012-09-27 2 views
11

ho codificato il seguente:Perché JSLint mi dice di usare "=== undefined" invece di "typeof ... === 'undefined'"?

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

Ma JSLint sta dicendo:

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

Come devo cambiare il mio codice?

+2

Non so nulla di jslint, ma penso che ti stia dicendo di farlo: '(showtitles === undefined)'. – Travesty3

+1

Lo dice nel messaggio: 'Usa' === 'per confrontare direttamente con undefined'. –

+0

'Il tipo''imprevisto '' è il problema, non il'! == '. – Blazemonger

risposta

6

Nota che questa sia la migliore pratica in generale è discutibile, ma se vuoi farlo funzionare con JSLint, puoi farlo

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

Quindi non ho bisogno di typeof? –

+1

@Marilou non se stai usando un confronto rigoroso. Detto questo, vorrei incoraggiare la ricerca su questo e decidere se vuoi fare cose così per te stesso e non solo seguire ciecamente il "consiglio" di JSLint. –

+0

Nel nodo ottengo: "ReferenceError: showTitles is not defined" –

8

Probabilmente utilizzando

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

JSLint non ci sono problemi con questo (assumendo showTitles e showSelectGroup sono dichiarate con var)

Tuttavia, mi piacerebbe scrivere come

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

Questo messaggio riflette le ultime migliori pratiche. A partire dalla modalità rigorosa ES5, il valore globale di undefinedcan no longer be changed e un confronto diretto è un codice più semplice e più veloce. In breve, JSLint is aware of all this, e ti sta dando un buon consiglio.

In questo caso, modificare typeof showTitles !== 'undefined' in showTitles === undefined.