ugrás a tartalomhoz

Bizarr viselkedés - WTF-JS

Endyl · 2010. Júl. 5. (H), 21.11
Egy igen bizarr viselkedésbe ütköztem, legalábbis ami a Firefox 3.6.6 verzióját illeti Windows SP3-on.

A helyzet az, hogy egy Webworkerben definiálok jópár konstanst, mindegyiket Number értékkel;
A kód számos részén használom ezeket a konstansokat sikeresen, ahol minden rendben működik.

Van azonban egy switch-em, nagyjából így.
  1. /** 
  2.  * sok másik konstans definíció 
  3.  */  
  4. const PROBLEMAS_KONSTANS = 7;  
  5. const EGY_MASIK_KONSTANS = 8;  
  6. /** 
  7.  * stb, stb... 
  8.  */  
  9.   
  10. cTipus = egyFuggveny(egyParameter);  
  11.   
  12. switch (cTipus)  
  13. {  
  14.   case EGY_MASIK_KONSTANS:  
  15.   case PROBLEMAS_KONSTANS:  
  16.     // ide kéne jutni  
  17.     break;  
  18.   // Több case-ág, mind helyesen működik  
  19.   default:  
  20.     kimenetre(cTipus);   
  21. }  
Lényeg a lényeg, cTipus értéke hiába egyezik meg PROBLEMAS_KONSTANS értékével, nem fut le az adott case-ág, hanem a default, ahol kiírja cTipus értékét, ami egyezik PROBLEMAS_KONSTANS értékével.

Minden más esetben a switch rendesen működik.

De a legfurcsább mind közül, hogy ha PROBLEMAS_KONSTANS-nak egy String értéket adok definícióban, akkor a helyes case-ág fut le és nem a default. Viszont bármilyen Number értékkel bukik a dolog.

A fájl UTF-8 BOM nélkül, de csak ASCII karakterek vannak benne, sorvég mindenhol egységesen CRLF.

Sajnos még ötletem sincs, hogy reprodukálni hogyan lehetne...

Valakinek ötlete, hogy ez hogyan jöhet össze?
 
1

egyFuggveny

Poetro · 2010. Júl. 5. (H), 21.51
Az egyFuggveny milyen típust ad vissza? Nem lehet hogy a kettő típusa nem egyezik meg? Biztos ami tuti, én azért ott szintén Number típust adnék vissza, amennyiben arra számítok.
2

milyen igaz

Endyl · 2010. Júl. 5. (H), 22.11
Lehet pihennem kéne kicsit; több helyen is átvertem magam az ellenőrzés során. De a lényeg, hogy az egyik ágon bizony String jött ki egyFuggveny-ből, máskor meg Number. Nem jó megfeledkezni a parseInt-ről...

Ezer hála!