Inhoud

  1. Geen paragrafen H1 - Voorwoord
  2. Geeft paragrafen weer H2 - Wat is JavaScript?
    1. §1. Wat kun je met JavaScript?
    2. §2. De script-tag
    3. §3. Opdrachten
  3. Geeft paragrafen weer H3 - Statements (opdrachten)
    1. §1. Wat zijn statements?
    2. §2. Functie document.write
    3. §3. Commentaar
    4. §4. Functie alert
    5. §5. Opdrachten
  4. Geeft paragrafen weer H4 - Variabelen
    1. §1. Wat is een variabele?
    2. §2. Variabelen maken en gebruiken
    3. §3. Functie prompt
    4. §4. Operatoren
    5. §5. Strings
    6. §6. Opdrachten
  5. Geeft paragrafen weer H5 - Functies
    1. §1. Wat is een functie?
    2. §2. Functies maken en gebruiken
    3. §3. Functies die iets teruggeven
    4. §4. Parameters en argumenten
    5. §5. De scope van variabelen
    6. §6. Expressies
    7. §7. Functie parseInt
    8. §8. Opdrachten
  6. Geeft paragrafen weer H6 - Loops en voorwaardes
    1. §1. Wat zijn loops en voorwaardes?
    2. §2. Het if-else statement
    3. §3. Vergelijkingen en hun operatoren
    4. §4. Functie confirm
    5. §5. Het switch-statement
    6. §6. De while-loop
    7. §7. De for-loop
    8. §8. Stoppen door break
    9. §9. Opdrachten
  7. Geeft paragrafen weer H7 - Events
    1. §1. Wat is een event?
    2. §2. Events maken en gebruiken
    3. §3. Welke events zijn er?
    4. §4. Variabele this
    5. §5. Event-object
    6. §6. Opdrachten
  8. Geeft paragrafen weer H8 - Arrays
    1. §1. Wat is een Array?
    2. §2. Een Array maken en gebruiken
    3. §3. Een Array doorlopen
    4. §4. Een associatieve array
    5. §5. De for-in loop
    6. §6. Opdrachten
  9. Geeft paragrafen weer H9 - Objecten
    1. §1. Wat is een object?
    2. §2. Verschil object en variabele
    3. §3. Eigenschappen
    4. §4. Methodes
    5. §5. Eigenschappen en methodes
    6. §6. Opdrachten
  10. Geeft paragrafen weer H10 - Globale objecten
    1. §1. Het window-object
    2. §2. Het document-object
    3. §3. Het Math-object
    4. §4. Standaard HTML-Element-object
    5. §5. Een HTML-Table-object
    6. §6. Opdrachten

4. Variabelen

In elke programmeertaal zijn variabelen erg belangrijk. In JavaScript dus ook. Misschien ken je ze al van wiskunde, maar in dit hoofdstuk wordt uitgelegd wat het in JavaScript zijn en hoe ze werken.

Naar boven

4.1. Wat is een variabele?

Een variabele is een plekje in het geheugen van de computer waarin een waarde is opgeslagen, en met de naam van die variabele kun je dan bij het geheugen op dat plekje. Ergens in het geheugen van de computer staat dus een waarde opgeslagen, en die kan jij dan met JavaScript veranderen of gebruiken.

Naar boven

4.2. Variabelen maken en gebruiken

Hoe maak je nou variabelen aan, en nog belangrijker: hoe gebruik je ze dan? Voor het aanmaken moet je dus op de een of andere manier de computer om een stukje geheugen vragen, en dat stukje geheugen moet je dan een naam geven. Namelijk de naam van de variabele. Dat klinkt ingewikkeld, maar dat is het niet:

JavaScript:
  1. var x;

Nu heb je dus een variabele x gemaakt. Het aanmaken van een variabele bestaat dus uit (minstens) twee delen: het woord var en een zelfgekozen naam (in dit geval: x).

Voor het geven van die naam zijn enkele regels:

  • De naam mag niet al bestaan (dus bijvoorbeeld alert en var zijn verboden)
  • De naam mag met een letter (hoofdletter of kleine letter) beginnen, of met een underscore (_)
  • De naam mag daarna letters (hoofdletters of kleine letters), underscores(_) en cijfers bevatten.

Enkele voorbeelden:

JavaScript:
  1. var x; // Is goed
  2. var X; // Is goed, let op: deze naam is anders dan de bovenstaande naam
  3. var naam; // Is goed
  4. var 2eNaam; // Is fout, een naam mag niet met een cijfer beginnen
  5. var tweede_naam; // Is goed
  6. var tweedeNaam; // Is goed
  7. var naam2; // Is goed
  8. var ___; // Is goed, maar af te raden (niet overzichtelijk)
  9. var var; // Is fout, de naam var bestaat al
  10. var $x; // Is fout, een $ is niet toegestaan
  11. var function; // Is fout, de naam function bestaat al (zie H5.2)

Voordat je de waarde van zo'n variabele kan gebruiken zul je eerst een waarde aan die variabele moeten toekennen:

JavaScript:
  1. var x;
  2. x = 42;

Een is-teken (=) betekent dus niet "is gelijk aan", maar "wordt gelijk aan" (of kortweg "wordt"). Je zou de bovenstaande code dus als volgt kunnen vertalen:

Maak een variabele, met de naam x;
x wordt 42;

Dit kan ook korter:

JavaScript:
  1. var x = 42; // Maak een variabele, met de naam x, en deze wordt 42

Nu x een waarde heeft kan die waarde ook gebruikt worden. Overal waar nu x staat zal dit vervangen worden door de waarde van x. Behalve als het tussen "" of '' staat, dan neemt de computer het namelijk letterlijk en ziet het dus niet als code (zoals besproken in H3.2).

JavaScript:
  1. var x = 42;
  2. document.write(x); // Uitvoer: 42
  3. document.write("<br />");
  4. document.write('x'); // Uitvoer: x (niet 42!)
  5. document.write("<br />");
  6. x = 11;
  7. document.write(x); // Uitvoer 11

Zoals je aan de laatste regel code kan zien kan de waarde van een variabele door de loop van het script heen wijzigen. Vandaar de term variabele, zijn waarde variëert namelijk.

Naar boven

4.3. Functie prompt

Variabelen blijken pas echt nuttig te zijn wanneer je invoer van de gebruiker wil vragen. Dan weet je namelijk niet van tevoren wat er ingevoerd gaat worden.

Met prompt() kun je de invoer van de gebruiker vragen, prompt() werkt hetzelfde als alert(). Alleen heeft/krijgt prompt zélf een waarde, namelijk de waarde van wat de gebruiker invult. Hoe dit precies kan, wordt beschreven in H5.3. Je kan dus schrijven:

JavaScript:
  1. var antwoord = prompt("Wat is uw naam?", "");
  2. document.write("Uw naam is: ");
  3. document.write(antwoord);

Zodra er dus een antwoord is gegeven krijgt het stukje prompt("Wat is uw naam?","") de waarde van het antwoord. Dat antwoord wordt vervolgens opgeslagen in de variabele antwoord, en die wordt vervolgens op het scherm gezet (achter de tekst Uw naam is:). De naam van de variabele hoeft niet per se antwoord te zijn, dat had ook bijvoorbeeld pipo mogen zijn, alleen is dat minder logisch.

Je kan ook zorgen dat de computer standaard al iets invult voor de gebruiker, door achter de tekst die weergegeven moet worden een komma te plaatsen en dan de tekst die je standaard ingevuld wil hebben:

JavaScript:
  1. var spamGebruiker = prompt("Wilt u zich inschrijven voor de nieuwsbrief?", "Ja");

Hier wordt dus standaard al de tekst Ja ingevuld in het invoervakje. Maar de gebruiker kan er nog altijd van maken wat hij of zij wil.

Naar boven

4.4. Operatoren

Om bewerkingen op die variabelen uit te voeren (zoals optellen, vermenigvuldigen, delen, etc) zijn er operatoren. Het zal je waarschijnlijk erg bekend voorkomen:

JavaScript:
  1. var a = 12 + 6;

In dit geval is het natuurlijk veel handiger gewoon 18 te schrijven.

Omdat overal waar je gewoon een getal in kan vullen je ook een variabele in kan vullen kun je die operatoren natuurlijk ook op variabelen toepassen:

JavaScript:
  1. var a = 6;
  2. var b = 5;
  3. document.write(a + b); // Uitvoer: 11
  4. document.write("<br />");
  5. document.write(b - a); // Uitvoer: -1
  6. document.write("<br />");
  7. document.write(a * b); // Uitvoer: 30

Er zijn een hoop verschillende operatoren. In de volgende tabel gaan we er even vanuit dat a = 6 en b = 5:

OperatorOmschrijvingVoorbeeldResultaat
+Optellenc = a + bc = 11
-Aftrekkenc = a - bc = 1
*Vermenigvuldigenc = a * bc = 30
/Delenc = a / bc = 1.2
%Modulo (rest)c = a % bc = 1
++Post-incrementc = a++c = 6 EN a = 7
++Pre-incrementc = ++ac = 7 EN a = 7
--Post-decrementc = a--c = 6 EN a = 5
--Pre-decrementc = --ac = 5 EN a = 5

Dit zijn alle operatoren waarmee je bewerkingen kan doen. Er bestaan ook zogenaamde toekenningsoperatoren. In de voorbeelden zijn weer a = 6 en b = 5 gebruikt.

OperatorVoorbeeldHetzelfde alsResultaat
=a = ba = 5
+=a += ba = a + ba = 11
-=a -= ba = a - ba = 1
*=a *= ba = a * ba = 30
/=a /= ba = a / ba = 1.2
%=a %= ba = a % ba = 1

De operatoren kennen gewoon de standaard voorrangsregels. Waarbij toekenningsoperatoren de laagste prioriteit hebben:

JavaScript:
  1. var a = 6;
  2. var b = a - 1; // b = 5
  3. document.write(a*b-2); // (6*5)-2 = 28
  4. document.write("<br />");
  5. document.write(a*(b-2)); // 6*(5-2) = 18
  6. document.write("<br />");
  7. a /= b+5; // a /= (5+5) => a /= 10 => a = 0.6
  8. a += 0.4; // a = 1
  9. document.write(a++); // Uitvoer: 1, a = 2 (eerst a gebruiken, daarna verhogen)
  10. document.write("<br />");
  11. document.write(++a); // Uitvoer: 3, a = 3 (eerst a verhogen, daarna gebruiken)
  12. document.write("<br />");
  13.  
  14. // En zelfs:
  15. document.write(a += 2); // Uitvoer: 5, a = 5
Naar boven

4.5. Strings

Strings zijn tekenreeksen, stukken tekst dus. Je bent ze al eerder tegen gekomen in dit boekje. Dat waren namelijk de teksten tussen "" of '', de stukjes die de browser dus niet zag als code maar als letterlijke tekst. Merk op dat er of "" of '' gebruikt moet worden, en geen combinatie daarvan! Dus "letterlijke tekst" is goed, 'letterlijke tekst' ook, maar "letterlijke tekst' of 'letterlijke tekst" niet!

Strings kunnen net als alle andere variabelen gebruikt worden:

JavaScript:
  1. var str = "Hello world!"; // Variabele aanmaken en daar een string in opslaan
  2. document.write(str); // Uitvoer: Hello world!

Variabelen waarin strings opgeslagen zijn hebben echter andere operatoren dan normale variabelen. Eigenlijk kennen ze alleen de operatoren =, + en +=.

De operator = hebben we al gezien:

JavaScript:
  1. var str = "Hello world!"; // Variabele aanmaken en daar een string in opslaan
  2. document.write(str); // Uitvoer: Hello world!
  3. str = " How are you?"; // Nieuwe waarde toekennen aan str
  4. document.write(str); // Uitvoer: How are you?

De operator + betekent hier eigenlijk niks anders dan twee strings, of een string en een getal aan elkaar vastmaken:

JavaScript:
  1. var str = "Hello" + ' ' + "world!";
  2. document.write(str); // Uitvoer: Hello world!

Als je de betekenis van + weet en de betekenis van =, dan is de betekenis van += niet zo moeilijk gezien a += b eigenlijk hetzelfde is als a = a + b. Dat geldt ook voor strings:

JavaScript:
  1. var str = "Hello ";
  2. str += "world!";
  3. document.write(str); // Uivoer: Hello world!
  4. document.write("<br />");
  5. document.write(str + " How are you?"); // Uitvoer: Hello world! How are you?
  6. str += " I'm " + 16 + " years old."; // Zelfs gewone getallen kunnen aan een string worden toegevoegd
  7. document.write("<br />");
  8. document.write(str); // Uitvoer: Hello world! I'm 16 years old.

De operatoren + en += hebben dus een dubbele betekenis. Voor de + geldt: deze telt alleen de getallen op als aan beide kanten een getal staat. Als een van beide kanten een string is zal de andere kant ook als string worden gezien en worden de strings aan elkaar geplakt. Bij += werkt dit ongeveer hetzelfde, dat komt omdat a += b eigenlijk hetzelfde is als a = a + b. Daarbij geldt dus wel dat a naderhand een string is als a of b een string was. Als ze beide een getal waren gebeurt wat je in H4.4 geleerd hebt, dan worden de getallen bij elkaar opgeteld en wordt a het resultaat hiervan.

Bij strings heb je nog wel eens het probleem dat je aanhalingstekens of enters in de string wil gebruiken. Daarvoor zijn de zogenaamde escape sequences bedacht, dat betekent dat je binnen in de string een soort speciale code hebt om aan te geven dat hij daar een enter moet plaatsen of dat de string niet eindigt bij dat aanhalingsteken:

JavaScript:
  1. var str = "Citaat van Caesar: \"Veni, vidi, vici\"";
  2. var str2 = "Regel 1\nRegel 2\nRegel 3";
  3. var str3 = 'Naam:\tCaesar\nCitaat:\t\'Veni, vidi, vici\'';
  4. var str4 = "U vindt het bestand in C:\\Program Files\\Adobe";

Er wordt dus eerst een \ geplaatst en dan nog een karakter. De eerste backslash (\) betekent dat er zo'n escape sequence gaat volgen. Daar zijn er een heleboel van, maar de belangrijksten zijn:

Escape sequenceBetekenis
\nEen enter
\tEen tab
\\Een \
\"Een " (de string stopt hier dan dus niet!)
\'Een ' (de string stopt hier dan dus niet!)

De \\ is nodig omdat een enkele \ zou betekenen dat er een escape sequence volgt, en dan zou de browser dus niet weten wat je bedoelt met: "C:\\Users\nick". Moet dit nou C:\Users\nick worden, of C:\Users<enter>ick? Je bedoelde dan waarschijnlijk de eerste, maar het wordt de laatste! Als je dus een \ wil typen, gebruik dan altijd \\.

Voor aanhalingstekens is echter een klein trucje, zodat je geen escape sequences hoeft te gebruiken. Want die escape sequences doen de overzichtelijkheid vaak niet ten goede (zoals je in het voorbeeld waarschijnlijk al gezien had). Als je dubbele aanhalingstekens wil gebruiken ("), dan kun je de string ook gewoon tussen enkele aanhalingstekens zetten ('). De browser weet immers toch dat het dan begint bij een ' en eindigt bij een ' (en niet bij een "). Andersom werkt dit uiteraard ook:

JavaScript:
  1. var str1 = "Da's vervelend!"; // Is goed, de string stopt immers toch pas bij een "
  2. var str2 = 'Citaten moeten tussen ", anders gaan er punten af!'; // Is ook goed, de string stopt toch pas bij een '
Naar boven

4.6. Opdrachten

  1. Geef van de volgende variabele namen aan of ze goed of fout zijn. Als een naam fout is, geef dan aan wat er fout is.
    1. blabla
    2. blaBla
    3. x_x
    4. x2
    5. 2x
    6. x_kwadraat
    7. xKwadraat
    8. x-kwadraat
    9. (x)
    10. x^2
    (H4.2)
    Antwoord
  2. Maak een script dat vraagt hoeveel boeken een boekwinkel verkocht heeft, vraag daarna hoe duur een boek is en vraag daarna hoeveel het de boekwinkel kost zo'n boek in te kopen. Daarna laat je de gebruiker weten hoeveel winst de boekwinkel gemaakt heeft.
    Je mag er hierbij vanuit gaan dat wat ingevoerd wordt geldige getallen zijn. (H4.4)
    Voorbeeld - Antwoord
  3. Voorspel de waarden van de variabelen na afloop van dit script.
    var a = 3;
    var b = 4;
    var c = 5;
    a += b+c;
    b = c++;
    c -= ++b;
    a *= b;
    (H4.4)
    Antwoord
  4. Maak een scriptje waarin je om iemands naam en leeftijd vraagt (2 prompt-boxjes dus). Laat dan vervolgens een alert-boxje zien met de volgende tekst:
    Hoi naam,
    ik ben leeftijdsverschil jaar ouder dan jij!

    Hierin is naam de eerder verkregen naam en leeftijdsverschil het verschil in leeftijd tussen jou en die ander. Het is hierbij niet erg als er komt te staan ik ben -3 jaar ouder dan jij! als je 3 jaar jonger bent.

    Je mag er weer vanuit gaan dat de ingevulde leeftijd een geldige leeftijd is. (H4.5)
    Antwoord