Introductie

Welkom bij de JavaScript oefeningen! Deze opdrachten bouwen langzaam op van simpel naar complex. Neem de tijd voor elke opdracht en test je code in de browser console (F12) of in een online editor zoals CodePen of JSFiddle.

Belangrijk:

Probeer elke opdracht eerst zelf op te lossen voordat je hulp vraagt. Zo leer je het beste!

Waar moet je coderen?

Maak een map aan voor deze oefeningen

Bijvoorbeeld: javascript-oefeningen op je computer

Organisatie:

  • Niveau 1-4: Maak één bestand per niveau (bijvoorbeeld: niveau1.js, niveau2.js)
  • Niveau 5-8: Maak per opdracht een aparte map met HTML + JS bestanden

Hoe te gebruiken

  • Begin bij Niveau 1 en werk je geleidelijk omhoog
  • Open je JavaScript bestand in VS Code
  • Test je code door het bestand te runnen in Node.js of in de browser console
  • Voor DOM opdrachten: maak een HTML bestand aan en link je JavaScript
  • Kom je er niet uit? Klik de 📖 Theorie link bij de opdracht
  • Haast je niet - begrip is belangrijker dan snelheid

Code testen:

  • Node.js: Open terminal in VS Code en typ: node niveau1.js
  • Browser: Maak een HTML bestand, link je JS, en open in Chrome (F12 voor console)
  • Online: Gebruik CodePen of JSFiddle voor snelle tests

Voorbeeld project structuur

javascript-oefeningen/
├── niveau1.js
├── niveau2.js
├── niveau3.js
├── niveau4.js
├── niveau5-dom/
│   ├── opdracht1.html
│   ├── opdracht1.js
│   ├── opdracht2.html
│   └── opdracht2.js
├── niveau6-projecten/
│   ├── todo-lijst/
│   │   ├── index.html
│   │   └── script.js
│   └── rekenmachine/
│       ├── index.html
│       └── script.js
└── niveau7-advanced/
    └── ...

Niveau 1: Absolute Beginners

1.1 Je eerste variabelen

Maak variabelen voor:

  • Je naam
  • Je leeftijd
  • Je favoriete kleur

Print ze allemaal naar de console.

1.2 Rekenen met JavaScript

Bereken het gemiddelde van drie cijfers: 7, 8, en 9. Sla het resultaat op in een variabele en print het.

1.3 String samenvoegen

Maak variabelen voor je voornaam en achternaam. Voeg ze samen tot een volledige naam met een spatie ertussen. Print een zin: "Hallo, mijn naam is [volledige naam]"

1.4 Template literals

Doe opdracht 1.3 opnieuw, maar gebruik nu backticks ` en ${} voor variabelen.

Voorbeeld format: `Dit is ${eenVariabele}`

1.5 Datatypes herkennen

Maak de volgende variabelen en print het type van elke variabele met typeof:

  • Een getal
  • Een string (tekst)
  • Een boolean (true of false)

Niveau 2: Functies en Condities

2.1 Je eerste functie

Maak een functie begroeting() die "Hallo wereld!" print naar de console. Roep de functie daarna aan.

2.2 Functie met parameter

Maak een functie begroetPersoon(naam) die print: "Hallo [naam], hoe gaat het?"

Test de functie met verschillende namen.

2.3 Functie met return

Maak een functie vermenigvuldig(a, b) die het product van a en b teruggeeft.

Gebruik de functie om 5 × 7 te berekenen en print het resultaat.

2.4 If-statement

Maak een functie isVolwassen(leeftijd) die:

  • "Je bent volwassen" print als leeftijd >= 18
  • "Je bent minderjarig" print als leeftijd < 18

Test met verschillende leeftijden.

2.5 Meerdere condities

Maak een functie beoordeelCijfer(cijfer) die een beoordeling geeft:

  • 8-10: "Uitstekend"
  • 6-7: "Voldoende"
  • 0-5: "Onvoldoende"

2.6 Even of oneven

Maak een functie evenOfOneven(getal) die checkt of een getal even of oneven is.

Tip: Gebruik de modulo operator (%). Als getal % 2 === 0 dan is het even.

Niveau 3: Loops en Arrays

3.1 For-loop basis

Print de getallen 1 tot en met 10 met een for-loop.

3.2 Even getallen

Print alleen de EVEN getallen van 0 tot 20 met een loop.

3.3 Tafel van vermenigvuldiging

Print de tafel van 5 (5 × 1 = 5, 5 × 2 = 10, etc.) tot en met 5 × 10.

3.4 Je eerste array

Maak een array met 5 vruchten.

  • Print de hele array
  • Print alleen het 3e element (let op: arrays beginnen bij 0!)
  • Print het aantal elementen in de array

3.5 Loop door array

Maak een array met 5 getallen: [5, 10, 15, 20, 25]

Gebruik een for-loop om:

  1. Alle getallen te printen
  2. De som van alle getallen te berekenen

3.6 Array methodes

Maak een array met namen: ["Anna", "Bas", "Chris"]

Doe het volgende en print de array na elke stap:

  1. Voeg "Diana" toe aan het einde (gebruik push)
  2. Voeg "Erik" toe aan het begin (gebruik unshift)
  3. Verwijder het laatste element (gebruik pop)

3.7 Zoeken in een array

Maak een array met getallen: [3, 7, 12, 5, 18, 9]

Schrijf code die:

  • Het grootste getal vindt
  • Het kleinste getal vindt

Niveau 4: Objecten en Array Methods

4.1 Object maken

Maak een object persoon met de volgende eigenschappen:

  • naam
  • leeftijd
  • woonplaats

Print het hele object en print ook alleen de leeftijd.

4.2 Object aanpassen

Gebruik het persoon object van opdracht 4.1.

  • Verander de leeftijd naar een nieuwe waarde
  • Voeg een nieuwe eigenschap hobby toe
  • Print het aangepaste object

4.3 Object met functie

Maak een object auto met eigenschappen:

  • merk
  • kleur
  • jaar

Voeg een functie beschrijf toe die print: "Dit is een [kleur] [merk] uit [jaar]"

Roep de functie aan.

4.4 Array van objecten

Maak een array studenten met 3 student-objecten. Elk object heeft:

  • naam
  • cijfer

Print alle namen met een loop.

4.5 forEach methode

Gebruik de studenten array van opdracht 4.4.

Gebruik forEach() om alle cijfers te printen.

Tip: array.forEach(function(item) { ... })

4.6 Map methode

Maak een array: [1, 2, 3, 4, 5]

Gebruik map() om een nieuwe array te maken waar elk getal verdubbeld is.

Tip: map() geeft een nieuwe array terug!

4.7 Filter methode

Maak een array: [12, 5, 8, 130, 44]

Gebruik filter() om alleen de getallen groter dan 10 te krijgen.

4.8 Find methode

Maak een array met student objecten (naam en cijfer).

Gebruik find() om de eerste student te vinden met een cijfer hoger dan 8.

Niveau 5: DOM Manipulatie

Let op: Voor deze opdrachten heb je HTML nodig!

Setup voor DOM opdrachten:

  1. Maak een map: niveau5-dom
  2. Per opdracht: maak een HTML bestand (bijv. opdracht1.html)
  3. Voeg de gegeven HTML code toe aan je bestand
  4. Maak een JavaScript bestand (bijv. opdracht1.js)
  5. Link je JS in de HTML: <script src="opdracht1.js"></script> (onderaan body)
  6. Open het HTML bestand in je browser

5.1 Element selecteren

HTML:

<h1 id="titel">Hallo Wereld</h1>
<p class="tekst">Dit is een paragraaf</p>

Opdracht:

Selecteer het h1 element met getElementById en verander de tekst naar "Hallo JavaScript!"

5.2 Element stylen

HTML:

<div id="box">Dit is een box</div>

Opdracht:

Verander met JavaScript:

  • De achtergrondkleur naar blauw
  • De tekstkleur naar wit
  • Voeg padding toe van 20px

5.3 Click event

HTML:

<button id="mijnKnop">Klik mij!</button>
<p id="resultaat"></p>

Opdracht:

Wanneer je op de knop klikt, verander de tekst van het <p> element naar "Je hebt geklikt!"

Tip: Gebruik addEventListener('click', function() { ... })

5.4 Teller maken

HTML:

<button id="verhoog">+</button>
<span id="teller">0</span>
<button id="verlaag">-</button>

Opdracht:

Maak een werkende teller:

  • De + knop verhoogt de waarde
  • De - knop verlaagt de waarde

5.5 Input lezen

HTML:

<input type="text" id="naamInput" placeholder="Vul je naam in">
<button id="begroetKnop">Begroet mij</button>
<p id="begroeting"></p>

Opdracht:

Lees de waarde uit het input veld en toon een begroeting: "Hallo [naam]!"

Tip: Gebruik .value om de waarde uit een input te halen.

5.6 Kleur veranderen

HTML:

<button id="roodKnop">Rood</button>
<button id="groenKnop">Groen</button>
<button id="blauwKnop">Blauw</button>
<div id="kleurBox" style="width: 200px; height: 200px; background: gray;"></div>

Opdracht:

Elke knop verandert de achtergrondkleur van de box naar die kleur.

5.7 Toggle visibility

HTML:

<button id="toggleKnop">Toon/Verberg</button>
<p id="tekst">Deze tekst kan worden verborgen</p>

Opdracht:

Maak een knop die de tekst laat verschijnen en verdwijnen (toggle).

Tip: Gebruik style.display = 'none' om te verbergen en style.display = 'block' om te tonen.

Niveau 6: Complexere Projectjes

6.1 To-Do lijst (basis)

HTML:

<input type="text" id="taakInput" placeholder="Nieuwe taak">
<button id="toevoegKnop">Toevoegen</button>
<ul id="takenLijst"></ul>

Opdracht:

Maak een simpele to-do lijst waar nieuwe taken worden toegevoegd aan de lijst.

Tips:
  • Gebruik createElement('li') om een nieuw list item te maken
  • Gebruik appendChild() om het toe te voegen aan de lijst
  • Maak het input veld leeg na toevoegen

6.2 To-Do lijst (met verwijderen)

Breid opdracht 6.1 uit:

  • Voeg een "Verwijder" knop toe bij elke taak
  • Wanneer je op de knop klikt, wordt die taak verwijderd

6.3 Random kleur generator

HTML:

<button id="verander">Verander Kleur</button>
<div id="kleurBox" style="width: 200px; height: 200px; background: gray;"></div>
<p id="kleurCode"></p>

Opdracht:

Genereer een random hex kleur (#RRGGBB) en:

  • Verander de achtergrond van de box naar die kleur
  • Toon de kleurcode
Tips:
  • Een hex kleur bestaat uit: # gevolgd door 6 karakters (0-9, A-F)
  • Gebruik Math.random() en Math.floor()
  • Maak een functie die een random kleur teruggeeft

6.4 Rekenmachine

HTML:

<input type="number" id="getal1" placeholder="Getal 1">
<select id="operator">
  <option value="+">+</option>
  <option value="-">-</option>
  <option value="*">×</option>
  <option value="/">÷</option>
</select>
<input type="number" id="getal2" placeholder="Getal 2">
<button id="bereken">Bereken</button>
<p id="antwoord"></p>

Opdracht:

Maak een werkende rekenmachine die kan optellen, aftrekken, vermenigvuldigen en delen.

Tips:
  • Gebruik parseFloat() om strings naar getallen om te zetten
  • Check voor deling door 0!

6.5 Getal raden spel

Maak een spel waar:

  1. De computer een random getal kiest tussen 1 en 100
  2. De speler kan raden
  3. Het programma zegt of het getal hoger of lager is
  4. Wanneer correct geraden, toon hoeveel pogingen het kostte

Niveau 7: Advanced Concepten

7.1 LocalStorage - Data opslaan

HTML:

<input type="text" id="naam" placeholder="Je naam">
<button id="opslaan">Opslaan</button>
<button id="laden">Laden</button>
<p id="geladen"></p>

Opdracht:

  • Sla de naam op in de browser (localStorage)
  • Laad de naam terug, zelfs na pagina refresh
Tips:
  • localStorage.setItem('key', 'value') om op te slaan
  • localStorage.getItem('key') om te laden

7.2 JSON en LocalStorage

Maak een array met taken (to-do items). Sla de hele array op in localStorage en laad hem terug.

Tip:

  • Gebruik JSON.stringify() om de array om te zetten naar een string
  • Gebruik JSON.parse() om de string terug te zetten naar een array

7.3 Fetch API - Data ophalen

Haal data op van een API: https://jsonplaceholder.typicode.com/users

Print de namen van alle gebruikers naar de console.

Tips:
  • Gebruik fetch(url)
  • Gebruik .then() om de response te verwerken
  • Of gebruik async en await

7.4 Async/Await

Doe opdracht 7.3 opnieuw, maar gebruik nu async en await in plaats van .then().

7.5 Error handling

Breid opdracht 7.4 uit met error handling:

  • Gebruik try en catch
  • Toon een foutmelding als de fetch mislukt

7.6 Destructuring

Maak een object persoon met naam, leeftijd en stad.

Gebruik destructuring om de waarden uit te pakken in aparte variabelen.

Voorbeeld: let { naam, leeftijd } = persoon;

7.7 Spread operator

Voeg twee arrays samen met de spread operator (...).

Test met: [1, 2, 3] en [4, 5, 6]

Voorbeeld: let samen = [...array1, ...array2];

7.8 Arrow functions

Herschrijf deze functie naar een arrow function:

function kwadraat(x) {
  return x * x;
}

7.9 Classes (OOP)

Maak een class Auto met:

  • Constructor die merk en jaar accepteert
  • Een method info() die "Deze [merk] is uit [jaar]" print

Maak twee auto objecten en roep de info method aan.

7.10 Classes met inheritance

Maak een class Dier met:

  • Constructor voor naam
  • Method maakGeluid() die "Het dier maakt geluid" print

Maak een class Hond die extends van Dier:

  • Override de maakGeluid() method om "Woef!" te printen

Niveau 8: Challenge Projecten

8.1 Quiz App

Maak een quiz applicatie met:

  • Minstens 5 meerkeuzevragen
  • Knoppen om een antwoord te kiezen
  • Score bijhouden
  • Resultaat tonen aan het einde
  • Knop om opnieuw te beginnen
Tips:
  • Gebruik een array van objecten voor de vragen
  • Elk object heeft: vraag, opties, correct antwoord
  • Houd bij welke vraag de gebruiker nu ziet

8.2 Stopwatch

Maak een stopwatch met:

  • Start knop
  • Stop knop
  • Reset knop
  • Tijd weergave (minuten:seconden:milliseconden)
Tips:
  • Gebruik setInterval(callback, ms) om elke 10ms te updaten
  • Gebruik clearInterval(id) om te stoppen — sla de id op: const id = setInterval(...)
  • Bereken minuten, seconden en milliseconden uit een oplopende teller

8.3 Memory Game

Maak een memory kaartspel met:

  • 8 paren kaarten (16 in totaal)
  • Kaarten kunnen worden omgedraaid
  • Check of twee omgedraaide kaarten matchen
  • Zet kaarten terug als ze niet matchen
  • Houd het aantal pogingen bij
  • Melding wanneer alle paren gevonden zijn
Tips:
  • Gebruik een array met 2× dezelfde waarden
  • Shuffle de array random
  • Gebruik data-attributen in HTML
  • Gebruik setTimeout voor vertraging

8.4 Weather App

Maak een weer applicatie die:

  • Een stad als input neemt
  • Het weer ophaalt van een gratis API (bijv. OpenWeatherMap)
  • Temperatuur, weerbeschrijving en icoon toont
  • Foutmeldingen geeft bij ongeldige steden
  • Een loader toont tijdens het laden
Tips:
  • Registreer voor een gratis API key
  • Gebruik fetch met async/await
  • Verwerk de JSON response
  • Style het mooi met CSS

8.5 Expense Tracker

Maak een uitgaven tracker die:

  • Uitgaven kan toevoegen (beschrijving, bedrag)
  • Alle uitgaven toont in een lijst
  • Het totale bedrag berekent
  • Uitgaven kan verwijderen
  • Data opslaat in localStorage

8.6 Pomodoro Timer

Maak een Pomodoro timer:

  • 25 minuten werk tijd
  • 5 minuten pauze
  • Start/Pauze/Reset knoppen
  • Visuele countdown
  • Geluid of melding aan het einde
  • Tel het aantal voltooide sessies

8.7 Notities App

Maak een notitie applicatie die:

  • Notities kan toevoegen met een titel en tekst
  • Notities kan bewerken
  • Notities kan verwijderen
  • Notities kan zoeken/filteren
  • Alles opslaat in localStorage
  • Een mooi design heeft

Tips

Tips voor succes

Typ de code zelf over

Niet kopiëren en plakken! Zo leer je het beter onthouden.

Experimenteer

Verander dingen en kijk wat er gebeurt. Zo leer je hoe het werkt.

Maak fouten

Dit is normaal en je leert er het meeste van!

Console.log is je vriend

Gebruik het vaak om te zien wat je code doet.

Neem pauzes

Je brein heeft tijd nodig om nieuwe informatie te verwerken.

Bouw eigen projectjes

Bedenk iets dat je leuk vindt en probeer het te maken.

Google is OK

Professionele developers googelen ook constant!

Vraag om hulp

Vastzetten is normaal, schaam je niet om te vragen.

Één ding per keer

Focus op één concept voordat je verder gaat.

Herhaling is key

Doe opdrachten meerdere keren totdat het vanzelf gaat.

Debuggen tips

  • Lees foutmeldingen goed - ze vertellen wat er fout gaat!
  • Check of je haakjes {} () [] goed hebt gesloten
  • Let op hoofdletters - JavaScript is case-sensitive
  • Vergeet geen puntkomma's ; (hoewel JS vaak zonder kan)
  • Test je code stap voor stap met console.log()

Laatste tip: Als je ergens vastloopt, probeer het dan uit te leggen aan een rubberen eendje (of je kat, of jezelf). Dit heet "rubber duck debugging" en werkt echt!