Avatar billede hoppe11 Nybegynder
28. januar 2010 - 22:01 Der er 12 kommentarer og
1 løsning

underlig if-statement

jeg har et object "obj" som kan forekomme på to forskellige måder..

enten kan det have en dimension som f.eks.
var obj = {
1:'test',
2:'test igen'
};

- eller det kan have flere
var obj = {
error:{23:'noget',4433:'noget andet'}
};

hvis objektet forekommer som i det første eksempel og jeg smider den i følgende if-statement melder den hverken fejl men stopper bare med at eksekvere mere js

if(obj.error[23])

hvorfor gør den det?? er det fordi der mangler et propertie mellem?

hvis jeg gør sådan her er der aldrig fejl

if(obj.error)
Avatar billede intenz Novice
29. januar 2010 - 12:55 #1
Du prøver at hente værdien i objectet på index 23. Der er ingen værdi her.
Du skal gøre sådan her:
obj.error[0].23
Avatar billede hoppe11 Nybegynder
29. januar 2010 - 20:36 #2
jeg har et eksempel

'obj' er altid noget..
'obj.error' kan være noget...

her stopper js med at eksekvere i tilfælde af at 'obj.error' ikke er noget
if(obj.error[key]) alert('fejl');
else alert('ok');

her virker det altid?
if(obj.error) {
    if(obj.error[key]) alert('fejl');
}
else alert('ok');

det fatter jeg ikke!?
Avatar billede hoppe11 Nybegynder
29. januar 2010 - 20:42 #3
http://bogfor.electrobeat.dk/_tst.php

hvorfor er det lige at javascript ikke kan æde den? kunne forstå den melder fejl hvis den stod udenfor en if-statement, men den står jo præcis i en if-statement - for at finde ud af om værdien er sat...
Avatar billede ksoren Nybegynder
29. januar 2010 - 21:17 #4
du kontroller jo heller ikke, om obj.error eksisterer i den første. Du antager blot den gør det, og forventer at finde et array.

Har du evt. overvejet noget try/catch

try{
    if(obj.error[28]){

    }else{

    }
}catch(err){
    alert("fejlen var: "+err.description);
}
Avatar billede hoppe11 Nybegynder
29. januar 2010 - 21:46 #5
hvad mener du med at jeg ikke kontrollerer om den eksisterer i den første?
Avatar billede ksoren Nybegynder
29. januar 2010 - 21:48 #6
obj.error returner undefined

undefined antager du er et array, og gør: undefined[i]

det går ikke godt
Avatar billede hoppe11 Nybegynder
29. januar 2010 - 22:16 #7
hvordan vil du ellers stille det op?

if(obj.error.txt) alert('fejl');
else alert('ok');
Avatar billede intenz Novice
30. januar 2010 - 00:21 #8
Sådan fungerer javascript ikke. Der returnerer forkert kode ikke false/true

Så som du skriver:
f(obj.error.txt) alert('fejl');

vil den altid lave en javascript fejl, hvis en eller flere af dine parametre ikke eksisterer (er 'undefined').
Så hvis 'obj' er undefined giver den fejl.
Hvis 'obj.error' er undefined giver den fejl
Eller hvis 'obj.error.txt' er undefined giver den fejl.
Avatar billede intenz Novice
30. januar 2010 - 00:22 #9
Så hvis du vil stille det op du skrev kan du gøre:
if(obj.error.txt != undefined) alert('fejl');
else alert('ok');
Avatar billede intenz Novice
30. januar 2010 - 00:25 #10
Jeg kan se, at dig eksempel giver null (nok fordi det er json object), så den skal måske være:
if(obj.error.txt != null) alert('fejl');
Avatar billede ksoren Nybegynder
30. januar 2010 - 11:08 #11
if(noget som er undefined)

kan man såmænd godt. Det bliver af javascript evalueret som false. Problemet er her anderledes.
Avatar billede hoppe11 Nybegynder
06. februar 2010 - 11:40 #12
@ intenz

der er ingen af de to eksempler som fungerer

if(obj.error.txt != undefined) alert('fejl');
else alert('ok');

if(obj.error.txt != null) alert('fejl');
else alert('ok');

indtil videre er det kun den her som virker :-/ det er selvfølgelig ikke noget problem, men kunne være rart nok at finde "fejlen" :)

if(obj.error)
                {
                    if(obj.error[key]) inp_elm[key].style.background = INP_BG_ERROR;
                    else inp_elm[key].style.background = '#ffffff';
                }
                else inp_elm[key].style.background = '#ffffff';
Avatar billede hoppe11 Nybegynder
16. oktober 2010 - 17:24 #13
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester