Questione di virgole
Pubblicato da andrea in Various il 09 giugno 2010 alle 23.19
Ho riscontrato un problema in un js nella manipolazione di un oggetto esperesso in notazione Json e ho utilizzato il debugger js integrato del browser per diagnosticarlo.
Questo è il codice che crea il problema cercando di accedere ad un oggetto non definito
<html>
<head><title>Watch test</title></head>
<body>
<script type="text/javascript">
var list = [{value:1}, {value:2},{value:3},];
for(var c = 0; c < list.length; c++){
var elem = list[c];
document.write(elem.value);
}
</script>
</body>
</html>
Notare la virgola prima della chisura dell’array: questo implica che il nostro array ha un elemento undefined in più, quindi il sull’ultimo elemento il js si pianta tentando di accedere ad una proprietà di un oggetto undefined.
Ecco cosa accade con i vari browser
Primo test: elemento undefined in fondo all’array
Internet Explorer 8
L’errore viene puntualmente identificato
andiamo in debug e mettiamo un watch
Il nostro array è composto da 3 elementi ma è lungo 4!
Internet Explorer 9 platform preview
Non si aggancia il debugger all’istanza, ma l’errore non si presenta se la pagina è messa in modalità “IE9 Document Mode” mentre nelle altre modalità è presente.
Firefox 3.6 beta 4 + Firebug
Firefox se ne frega bellamente, l’array è da 3: nessun errore
Chrome 5.0.375.70 beta
Anche chrome si prende la briga di considerare l’array da 3
Secondo test: elemento undefined in mezzo all’array
<html>
<head><title>Watch test</title></head>
<body>
<script type="text/javascript">
var list = [{value:1}, {value:2},,{value:3}];
for(var c = 0; c < list.length; c++){
var elem = list[c];
document.write(elem.value);
}
document.write('fine');
</script>
</body>
</html>
Internet Explorer 8
Per explorer non è cambiato nulla, l’array è sempre da 4 e l’errore si presenta puntualmente.
Internet Explorer 9 platform preview
Errore sempre presente, ma è impossibile valutare il debugger.
Firefox 3.6 beta 4 + Firebug
L’array è da 4 elementi di cui uno undefined
Chrome 5.0.375.70 beta
Anche per Chrome le cose non sono cambiate.
L’errore viene visualizzato solamente con i tool di sviluppo attivi.
Conclusioni
- L’unico debugger a visualizzare correttamente la lista è Firebug che mostra un bel "undefined”
- Explorer8 ha un comportamento differente dagli altri browser mentre IE9 si allinea al comportamento di FireFox e Chrome
- Quando possibile far generare il Json da c#
Pubblicato da andrea in Various il 09 giugno 2010 alle 23.19
