2010-10-14 6 views
2

Il est 20h30 et je suis après une chasse aux bogues de 6 heures d'un bug irritant causé par une variable membre non initialisée.comportement indéfini avec une variable membre non initialisée en javascript

Dans la notre version précédente, nous avons eu les quelques lignes de code:

var aList = new Array; 
for (var iDx=0; iDx < nNumOfElements; iDx++) 
{ 
    // Some code 
    aList.nCount = someValue; //This line 
} 

aList.sort(function(a, b) { return b.nCount - a.nCount ; }); 

Dans la dernière personne de libération accidentellement supprimé la ligne avec un commentaire. et il n'y avait pas d'autre initialisation de la variable membre nCount.

Certains de nos clients ont une exception "Nombre prévu" qui est assez évident (rétrospectivement), étrangement l'erreur ne se reproduit pas avec notre Q.A. ni 80% de nos clients!

Comment cela peut-il être? existe-t-il un mode strict que nous pouvons utiliser pour trouver de tels bugs? Quelle est la différence entre les clients qui ont obtenu l'exception et ceux qui ne l'ont pas fait (ce n'est pas la version du navigateur ni la version Windows)

(notre système fonctionne uniquement sur IE6 + dans un conteneur spécial, ce qui rend difficile l'écriture de code dans IDE normal, nous écrivons à peu près tout dans le bloc-notes ++)

Répondre

6

Vous avez écrit int au lieu de var. Je fais cela tout le temps ...

int iDx=0 devrait être var iDx=0. A propos, quel éditeur utilisez-vous? int est un "futur mot réservé" dans ES, donc un bon éditeur peut le mettre en évidence d'une manière moche (gedit le rend rouge avec un soulignement rouge par défaut) pour attirer votre attention.

+1

haha, qui m'a tué tant de fois dans JS –

+0

curieux, est-ce une cause de la confusion JavaScript vs Java? : P – BoltClock

+0

J'ai récemment utilisé un 'bool'. :) – casablanca

0

On dirait que c'est un bug avec IE6 lié au tri des tableaux.

Essayez les solutions de contournement suggéré here ...

Questions connexes