Avatar billede jesper-moeller Nybegynder
21. juli 2005 - 13:27 Der er 4 kommentarer og
1 løsning

JavaScript Semantik (Teoretisk spørgsmål)

Har et enkelt lille spørgsmål vedr. Semantiken i JavaScript :-)
JavaScript er ganske nyt for mig, og men jeg forsøger da at lære det, og min erfaring siger mig, at jo mere grundforståelse for et emne, desto nemmere at forstå finesserne, derfor dette Teoretisk spørgsmål,  som jeg håber nogen kan komme med en fornuftig udredning på :-)

Ofte i div. tutorials/examples set noget der ligende følgende:

<script type="text/javascript">
<!--
function makeHidden(){
if (document.getElementById){
document.getElementById("layer1").style.visibility="hidden"
}
if(document.all){
document.all["layer1"].style.visibility="hidden"
}
if(document.layers){
document.layers["layer1"].visibility="hidden"
}
}
// -->
</script>

Her vist med3 "if" , men også tit set ligende med 1 "if" og 2 "else if"
vilket jo giver samme resultat.
Men det der genere mig er semantiken i det. Implikationerne i "if" og "else if"
"if"  = "hvis og kun hvis"
"else if" = "hvis ikke ... så ... men kun hvis"
Så semantisk set må rækkefølgen:
> if(document.get >
> else if(document.all >
> else if(document.layers
Være semantisk mere korekt ??? Da (i teorien) alle 3 "if"sætninger kunne være sande (Ja ja. ikke i dette lille eks :-) men hvis man bruger "else if" kan de to "else if" implikationer kun være sande hvis forgående var falske ???

Næste del er så den sidtse line:
Mener at den da ikke burde være en "if" eller  "else if" men snare en "else"
"else" Implikere "hvis ikke ... så "
Til forskel fra "else if" = "hvis ikke ... så ... men kun hvis" som kræver et sandt udsang for at aktiveres, så vil "else" = "hvis ikke ... så "  altid aktiveres såfremt foregående implikationer ikke har været aktive (sande/falske)

Så den mest semantiske korekte rækkefølge må da være:
> if(document.get >
> else if(document.all >
> else(document.layers
Eller har jeg fuldstændigt misforstået JavaScript ?????

Jeg ved godt det ikke har nogen særlig betydning i eksemplet, men en dag støder jeg nok ind i et noget mere komplekst script hvor den rette semantik er påkrævet, og så vil det være rart at have lidt grundforståelse :-)

Jesper
Avatar billede roenving Novice
21. juli 2005 - 13:44 #1
Den rigtige konstruktion i ovenstående eksempel er if ... else if ... else if !-)

-- for du har helt ret i, at det at bruge if tre gange ikke er en god ide, da der ingen grund er til at evaluere flere udtryk, når først et er fundet sandt, så det er altså bare spild af gode kræfter ...

Men !-)

Det to første vil faktisk være sande i IE5+ og tilstrækkelig nye Operaer, og vil derfor unødigt sætte en style-property to gange efter først at have fundet frem til elementet hver gang, først i den ret begrænsede collection af elementer med id'er, derefter i den adskilligt mere omfattende collection af samtlige elementer ...

-- og det er ikke et absolut, at hvis ikke browseren forstår enten .getElementById eller .all, at den så forstår .layers, for der er ældre browsere, som ikke forstår nogen af dem (hrm, måske !-), og så er der nye devices, som måske forstår et begrænset udpluk af html (håndholdte, mobiler osv.)

-- så der skal altså tages højde for at browseren hverken forstår DOM ifølge standarden, er IE4+ eller NS4 !o]
Avatar billede jesper-moeller Nybegynder
21. juli 2005 - 14:13 #2
*S*

Oki
Ja kan se jeg fik rodet lidt rund med rækkefælgen ....normalt ville jeg selv bruge:
> if(document.layers >
> else if(document.all >
> else(document.get
(ældste browser øverst)

Men du mener altså ikke at  den sidste "else if" burde være en "else" ???

> "-- så der skal altså tages højde for at browseren hverken forstår DOM ifølge standarden, er IE4+ eller NS4 !o]"
i alle de DOM tutorials jeg har set, siger de ellers man skal bruge dette så det virker i  IE4+ NN4+ browsere ?
På den anden side *G* .... er vel ikke mange der bruger de browserversioner længere .... *G*
Men var nu også mere teorien bag Scriptet.... altså if...else if semantiken ....ikke så meget lige det med dom ;-)

Tror jeg fattede hvad du mener med "collection af elementer" og du har jo ret...*S* ....den gør det jo 2 gange i eksemplet :-) ..... Herligt....den havde jeg ikke set...*S*...ny lærdom...*S*

selvom både all og get går i IE5+ skader det jo ikke at have begge med.....bare den kun bruger den ene ikk?? :-)

Jesper

PS... Hvis du smider et svar istedet for en kommentar .... har jeg mulighed for at kaste lidt point efter dig :-)
Hvis jeg altså kan få den til det...*G*

(Toure tid *S*)
Avatar billede roenving Novice
21. juli 2005 - 14:22 #3
Det var faktisk den rette rækkefølge, du fik brugt først, fordi der er god grund til at forvente, at den bruger, som kommer på besøg har en browser, som forstår DOM, da et eller andet sted mellem 97% og 99,9% forstår det, så det skal man selvfølgelig prøve først !-)

-- og nej, for det vil jo generere en fejl, hvis det f.eks. er en IE3 eller en NS2/3 !o]

-- det skader ikke, men selv er jeg holdt op med at understøtte v4-browserne ...

-- og lad være med at forkorte til get, for det vil afhængig af konteksten skabe muligheder for uheldige misforståelser, for det fremgår jo ikke om det f.eks. er dato.getDate() du mener ...

-- els velbekomme '-)
Avatar billede jesper-moeller Nybegynder
21. juli 2005 - 14:39 #4
> "og nej, for det vil jo generere en fejl, hvis det f.eks. er en IE3 eller en NS2/3 "

AHA !!!    c",)

så klog jeg bliver *S* takker :-)

DVS. at hvis jeg slutter med en "else" så SKAL jeg undervejs (i dette eks.) i scriptet, værre 120% sikker på at have en "if" for hver eneste mulige browser, for at undgå fejl ?
(Havde måske med et ikke dom eksemple *G*)


> "lad være med at forkorte til get, for det vil afhængig af konteksten skabe muligheder for uheldige misforståelser,"

Skal jeg lade være med  c",)
Kan se problemet *S*...mente bare det i denne sammenhæng ikke var så vigtigt..*S* (+ det fremgik af eksemplet) men skal undgå det i fremtiden ;-)
Avatar billede roenving Novice
21. juli 2005 - 14:54 #5
Tak for point ;~}
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