Questione di virgole

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

image

andiamo in debug e mettiamo un watch

image

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

image

Chrome 5.0.375.70 beta
Anche chrome si prende la briga di considerare l’array da 3

image

 

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.

image

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

image

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.

image

Conclusioni

  1. L’unico debugger a visualizzare correttamente la lista è Firebug che mostra un bel "undefined”
  2. Explorer8 ha un comportamento differente dagli altri browser mentre IE9 si allinea al comportamento di FireFox e Chrome
  3. Quando possibile far generare il Json da c#
0 commenti

Browser, Debugger, Javascript

[top]


(will not be published)
(es: http://www.mysite.com)

 
Andrea Balducci - IEnumerable.it