:  Retur til startside

JAVA  SCRIPT      

Elementært : Sådan skrives JavaScript kode i HTML
   :  Praktisk indføring i JavaScript, forkursus
 :  Midlertidige vinduer
 :  Fejlfangere til aflusning
 :  Formel indføring i JavaScript
 :  Litteratur, links til andre hjemmesider
      Objekter :
     :  Window-hirakiet
     :  Globale objekter   
     :  Objekter tilknyttet simple datatyper
   :  Datatyper
 :  Funktioner, referencer og variable 
 :  Operatorer
 :  Kontrolstrukturer, løkker
 :  Globale variable og funktioner   
NB :  Objekter, attributter, metoder og event handlers i det følgende virker med både Netscape og Internet Explorer fra version 4, hvis ikke andet er bemærket. Det der er skrevet med skråskrift virker ikke med Internet Explorer, men nok med Netscape,
hvis det også står med grå skrift kan det være at det ikke virker overhovedet !
 

  window-hirakiet      objekter tilknyttet HTML-elementer eller andre skærm-elementer
 window
  screen  navigator  
plugins    mimeTypes

History Location document
ToolbarTyper:
locationbar  menubar  personalbar  scrollbars  statusbar  toolbar

links anchor layers forms
  Virker kun med Internet Explorer fra version 4.0 all   applet   Images   area
  Virker kun med Internet Explorer fra version 4.0  style

TextTyper:
text  textarea
 password  fileUpload
CheckboxTyper:
radio  checkbox
ButtonTyper:
button  reset  submit
hidden Select

options
Det er kun de objecter med en rød pil under sig der er forældreobjekter*, dvs her har alle objekter i én vandret linie de samme forældre, og eksempelvis: Hvis form med navnet minForm indeholder en radio-knap med navnet minAndenRadio, så kan der henvises til minAndenRadio med
        window.document.minForm.minAndenRadio
Det er ikke altid nødvendigt at skrive window og document, hvis det er oplagt at det er dette vindue og dette dokument.
I eksemplet er formen er defineret som <FORM name=minForm> og radioknappen som <INPUT type=radio name=MinAndenRadio>. Man kan eksempelvis se om den er udfyldt (har prik i midten) med java-koden     if (document.minForm.MinAndenRadio.checked){...
Der er dog ikke tale om sande forældreobjekter og børn som det kendes fra ObjektOrienteretProgrammering ,  kun at barnet er en variabel af typen objekt ,  ejet af forældre. Barnet arver derfor ikke forældrens variable og metoder.
 
   

Globale   objekter      

  :  Object  : Array
 : String
 : RegExp
 : Math
 : Date
 : Function
ikke lavet : event
ikke lavet : Event
 :  Objekter tilknyttet simple datatyper
 
  Generelt   om   objekter
Objekter har et begreb arv, og i JavaScript er objekttypen Objekt forældre til alle objekter, og som regel uden mellemled.
Alle objekttypen Object's ejendomme kan derfor bruges af alle objekter, det er:
          Variable ejet af Objekt          Metoder ejet af Object     
          constructor
          prototype
          toString()
          valueOf()
Eksempelvis objekttypen "Date", jeg laver lige et af slagsen: d=new Date() . Her siger jeg at jeg laver et nyt objekt d af typen eller objekttypen Date .. det skal dog bemærkes, at her følger jeg ikke den almindelige konvension som ulogisk kalder Date for objektet, og d for en forekomst af objektet .  Nå, men nu arver Date alle Object's ejendele nævnt ovenfor:
   Variable arvet fra Objekt                          Metoder arvet fra Object
d.constructor = d.toString() =
d.valueOf() =
Metoden toString() arver d ganske vist, men omdefinerer den. De øvrige ejendele som er vist her kan man ikke finde noget om i 
  oversigten over objekt Date - de tilhører nemlig alle objekter, så det er ikke nødvendigt at nævne dem hver gang.
Variablen  prototype  kan bruges til at tilføje egenskaber, f.eks:
<script> Object.prototype.nyslags='Mallebrok er død i krigen'; </script>
Test:
 :  Eksempel hvor metode tilføjes til objekter af typen String

Når jeg fremover giver eksempler på javaScript kode vil jeg ikke skrive <script> og </script> ,  det skal med hver gang og er derfor underforstået.
 
 
 
  Datatyper
De "simple" datatyper er:
booleankan være true eller false
NumberEt tal, typen kan deles op i to:
  integerheltal -2147483648 .. 2147483647 (32-bits signet integer)
  Flydende komma tal  et heltal + et punktum og/eller et e (eller E, 10-exponent)+et heltal
Strenge   "noget tekst, en række af tegn"
Søgestrenge   hedder "regular expression" og behandles helt specielt
I modsætning til næsten alle andre programmeringssprog, inclusive C, C++ og Java, skal variabeltypen ikke erklæres i JavaScript. a=5-2 eller a="5"-"2" giver variablen a værdien 3; men a=5+2 kan give 7 eller 52 alt efter om det opfattes som et heltal eller en streng. a=5+2 sætter a=7  og a="5"+"2" sætter a=52.      

Objekter tilknyttet simple typer

Ud fra de "simple typer" :    Boolean
Number    
og
String
er der defineret objekttyper, f.eks. er Boolean en standard-type object, der kan erklæres ved:   var bo1 = new Boolean(false)  
Man kan bruge disse objecter til
funktionskald "by reference". Men jeg fraråder dog brugen af disse objekter, da der for let kan opstå fejl. Ovenstående laver et object af typen boolean der får værdien false, så bo1.valueOf() = false, men selvom det virker så er fejlmulighederne for store.
Eksempel, hvad der kan ske hvis man glemmer  .valueOf():
<script>
 var bo1=new Boolean(false);
 var bo2=bo1.valueOf();
 if (bo1) document.write("bo1 er true, bo1.valueOf()="+bo2)
  else    document.write("bo1 er false, bo1.valueOf()="+bo2)
</script>

Her kommer så scriptet i praksis, det skriver:

Altså, if (bo1) udregnede korrekt bo1 til true - det er bo1.valueOf() der er false. en if-sætning i JavaScript udregner alt der er defineret, og ikke lig ( 0, false, NaN eller en tom streng ), til true.
Skulle man komme til at glemme () efter valueOf så bliver udskriften:

Det er et eksempel på en udskrift af en variabel der er sat lig et objekt af typen Function, som er en objekttype jeg normalt vil fraråde at bruge.
Objecttypen (Function) kan dog med fordel bruges til at tilføje visse event-handlere til knapper (button) i en formular: (klik)

Object-typen Number ejer nogle konstanter :  NaN (Not a Number),
NEGATIVE_INFINITY, POSITIVE_INFINITY ( -undelig og +uendelig ),
MIN_VALUE = , MAX_VALUE = (mindste og største mulige positive værdi).



Omregning til hextal metoden toString() (som arves fra objektet Object men kan omdefineres) er i objekt Number derfineret, så man kan skrive grundtallet i parantesen -- grundtallet er basis for det talsystem nummeret skal vises i, normalt er 10 (10-tals-systemet), men det er 16 for hextal.

Char    er ikke en "simpel type", men ordet "Char" er et reserveret ord i javaScript, selvom det ikke bruges til noget.
 
 

  Indlejring af JavaScript i HTML

<script language=javaScript>
  // Her en kommentar, kun på én linie
  /* Her en kommentar,
  der gerne må være på flere linier */
  var s="Elementært kære Wasson";
  document.write(s)
</script>

Her afprøves scriptet :    
Det definerer en streng s og skriver den på skærmen med metoden document.write().
I linien <script language=javaScript> er det strengt taget ikke nødvendigt at skrive " language=javaScript " ,   der er for øjeblikket ikke flere muligheder.
Hver kodelinie, undtagen dokumentarlinierne, skal afsluttes med semikolon.
Jeg har dog her været doven og sprunget det sidste semikolon over, det er valgfrit.



  Generelt om JavaScript

JavaScript er et programmeringssprog beregnet til udførelse i forbindelse med HTML-filer. Det er en simplificeret udgave af C++ og Java, og ligesom disse sprog er det objekt-orienteret og skelner mellem store og små bogstaver.
Det er et fortolkende sprog (modsat compileret sprog), dvs koden tolkes påny af browseren hver gang filen læses.
Variable kan valgfrit erklæres, men ikke tildeles type, og somme tider kan man komme ud for at det ikke lige får den type man forventede :  Hvis f.eks a=2 så kan 3+a somme tider give 32 i stedet for 5, hvis JavaScript opfattede a som en streng i stedet for et tal  
 . 
Der er ikke (eller sjældent) type-check, fejlene får lov at passere og browseren udregner udtrykkene så godt det lader sig gøre. Når det ikke kan lade sig gøre returneres somme tider en specialværdi, f.eks.   2 / 0 =     2*"øl" = , Not a Number. Hvis man derimod prøver at udregne 2*øl så kommer der en fejlmelding, fordi øl (uden gåseøjne) opfattes som en variabel, og ø er et ulovligt tegn i et variabelnavn.
Der er en meget velfungerende "garbage collection": Når en variabel ikke bruges mere og er utilgængelig, nedlægges den automatisk.

Globale og lokale variable
En variabel kan erklæres med var variabelnavn, eller med variabelnavn=17, eller med var variabelnavn=17. Det lille ord var har normalt ingen betydning.
En variabel, erklæret udenfor en funktion, er en global variabel. Den kan bruges overalt i HTML-filen hvor der bruges javaScript.
En variabel erklæret med var indeni en funktion er en lokal variabel, dvs den (gen-)kendes kun indeni funktionen, og en anden funktion kan genbruge navnet til en helt anden variabel, uden at der opstår konflikter. Uden ordet "var" bliver variablen global, når funktionen har været kaldt første gang.



Der er to slags javaScript:
SSJS ServerSite JavaScript  udføres af serveren, når HTML-filen med indlejrede kode skal downloades
CSJS ClientSite JavaScript  udføres af browseren, når HTML-filen er downloaded
Mine sider omhandler udelukkende CSJS.
  Online lærebøger: 
: Quick reference til objekter og globale variable, af Danny Goodmann, forfatter til bl.a. "The Javascript Bible" : Jeg har desværrre ikke selv fået læst nogen af bøgerne :  
Fra Netscape's hjemmeside:
Det var bl.a. herfra jeg fik min viden, og det er læææænge siden, der er nok løbet meget vand i åen siden. Bl.a. den detalje, at Netscape i mellemtiden har nedlagt siden.

 
De store eksempler virker som vinden blæser :    Gamperl og Nefzger: "JavaScript i praksis", Ingeniøren/bøger 2001 (for dårlig, men jeg kender ikke andre bøger på dansk)
   
 :  Til toppen af siden