2013-04-26 15 views
6

Ho questo nel mio javascript:Come faccio a verificare i valori non definiti in IE8?

console.log(filters); 
console.log('----'); 
console.log(filters.max_price); 

In Chrome, mostra questo. Questo è il comportamento previsto.

Object {max_price: undefined, sort_by: undefined, distance: undefined, start: undefined, num: undefined} 
---- 
undefined 

in IE8, il registro mostra questo:

LOG: Object Object 
---- 
LOG: String 

Perché IE8 pensano che sia una stringa? Devo sapere se è indefinito.

Ho un sacco di codice che imposta valori predefiniti.

if(typeof filters.max_price == undefined){ //I use this technique a lot! 
    filter.max_price = 2000; 
} 

Come è possibile verificare la presenza di undefine-ds in IE8? Dovrei farlo? Questo sembra funzionare (yay ...), ma sembra a buon mercato e hacky.

if(!filters.max_price || typeof filters.max_price == 'undefined'){ 

C'è un modo semplice che posso fare questo con sottolineatura?

+0

Intendi "non definito" come in "dichiarato ma non definito" o "non definito" come in "non dichiarato né definito"; due cose diverse ... – elclanrs

+0

http://stackoverflow.com/questions/690251/what-happened-to-console-log-in-ie8 – jurgemaister

+0

@jurgemaister lo so ... ma questo non ha nulla a che fare con la domanda – TIMEX

risposta

5

È possibile utilizzare questo approccio, ma non riduce il codice molto:

filters.max_price = filters.max_price || 2000; 

Questo, tuttavia, potrebbe sovrascrivere il valore se si tratta di 0. L'approccio migliore rimane:

if(typeof filters.max_price === 'undefined'){ 
    // init default 
} 
+0

La === è migliore della mia versione corrente di ==? La tripla === funzionerà con IE8? – TIMEX

+0

@TIMEX Triple confronta anche i tipi e il tipo di indefinito è "indefinito" –

+0

Non funziona con IE8. if (typeof filters.max_price === 'undefined') {.... IE8 non lo cattura. – TIMEX

0

è possibile utilizzare un operatore di guardia per impostare un valore predefinito:

filters.max_price = filters.max_price || 2000; 

per controllare se il valore è un numero (w hich supponevo un prezzo è), è possibile utilizzare

if(isNaN(filters.max_price)) { 
    //enter code here 
} 

Questo sarà anche filtrare undefined come non un numero.

Problemi correlati