Waarom moderne JavaScript leren?

In leerjaar 1 ben je begonnen met het leren van JavaScript en in leerjaar 2 ga je daar dieper op in. Dit houdt ook in dat je bepaalde onderdelen van JavaScript anders gaat schrijven.

Sommige onderdelen zijn namelijk op de oude manier beschreven, maar jij gaat het nu aanleren zoals het in bedrijven wordt toegepast.

Belangrijk om te weten:
Wat je leert is niet fout - het is gewoon oudere syntax. De moderne manier is:
  • Korter en duidelijker
  • Standaard in de industrie
  • Makkelijker te lezen en schrijven

Arrow Functions

Van normale functions naar arrow functions

Het declareren van een function gaat tegenwoordig net even anders. Arrow functions zorgen ervoor dat je op een verkorte manier een functie kunt maken, zonder het keyword function.

Oude manier (normale function):

function calculate(a, b) {
  console.log(a * b);
}

Nieuwe manier (arrow function):

const calculate = (a, b) => {
  console.log(a * b);
};

Hoe werken arrow functions?

Eigenlijk is een functie nu een variabel (zie const), maar doordat deze variabel parameters heeft () is het een functie.

Structuur van een arrow function:
const functionName = (parameters) => {
  // code hier
};

Verschillende vormen van arrow functions

1. Functie met meerdere parameters

const add = (a, b) => {
  return a + b;
};

console.log(add(5, 3)); // 8

2. Functie met één parameter (haakjes mogen weg)

// Met haakjes:
const double = (x) => {
  return x * 2;
};

// Zonder haakjes (beide zijn correct):
const double = x => {
  return x * 2;
};

3. Functie zonder parameters

const sayHello = () => {
  console.log('Hello!');
};

sayHello(); // "Hello!"

4. Korte arrow functions (één regel)

Als je functie maar één regel heeft, kun je de accolades en return weglaten:

// Lange versie:
const multiply = (a, b) => {
  return a * b;
};

// Korte versie:
const multiply = (a, b) => a * b;

console.log(multiply(4, 5)); // 20

Vergelijking oude vs nieuwe syntax

Oude manier Nieuwe manier (arrow)
function add(a, b) { return a + b; } const add = (a, b) => a + b;
function double(x) { return x * 2; } const double = x => x * 2;
function greet() { console.log('Hi'); } const greet = () => console.log('Hi');
Vanaf nu schrijf je functies als arrow functions!

Wanneer WEL arrow functions gebruiken?

Arrow functions zijn perfect voor:
  • Event listeners - button.addEventListener('click', () => {...})
  • Array methods - array.map(item => item * 2)
  • Callback functies - setTimeout(() => {...}, 1000)
  • Korte functies - const add = (a, b) => a + b;
  • Moderne code in React/Vue - Standaard in moderne frameworks

Wanneer GEEN arrow functions gebruiken?

Gebruik normale functions voor:
  • Object methods die this gebruiken - Arrow functions hebben geen eigen this
  • Constructor functions - Je kunt geen new gebruiken met arrow functions

Praktisch voorbeeld met this

const persoon = {
  naam: 'Jan',
  
  //GOED: Method shorthand heeft toegang tot 'this'
  begroet() {
    console.log(`Hallo, ik ben ${this.naam}`);
  },
  
  //FOUT: Arrow function heeft geen eigen 'this'
  begroetFout: () => {
    console.log(`Hallo, ik ben ${this.naam}`); // undefined!
  }
};

persoon.begroet();      // "Hallo, ik ben Jan" 
persoon.begroetFout();  // "Hallo, ik ben undefined"
Simpele regel:
Voor 95% van je code gebruik je arrow functions. Alleen bij object methods die this gebruiken, gebruik je normale functions.

For/of Loop

Waarom for/of loop?

Een for...of loop wordt vooral gebruikt om door een array te lopen, maar met het verschil dat elk item in een array tijdelijk in een variabel wordt opgeslagen.

Hoe werkt for/of?

const cars = ['BMW', 'Volvo', 'Mini'];

for (let car of cars) {
  console.log(car);
  // Elk item in de array wordt elke "ronde" 
  // in variabel 'car' opgeslagen
}
Wat gebeurt er per ronde:
  • Ronde 1: car = 'BMW'
  • Ronde 2: car = 'Volvo'
  • Ronde 3: car = 'Mini'

Vergelijking met normale for loop

Oude manier (for loop met index):

const cars = ['BMW', 'Volvo', 'Mini'];

for (let i = 0; i < cars.length; i++) {
  console.log(cars[i]);
}

Nieuwe manier (for...of loop):

const cars = ['BMW', 'Volvo', 'Mini'];

for (let car of cars) {
  console.log(car);
}
Voordelen van for...of:
  • Korter en duidelijker
  • Geen index nodig
  • Minder kans op fouten
  • Beter leesbaar

For/of met objecten

const students = [
  { name: 'Jan', age: 20 },
  { name: 'Piet', age: 22 },
  { name: 'Klaas', age: 19 }
];

for (let student of students) {
  console.log(`${student.name} is ${student.age} jaar oud`);
}

Template Literals (Backticks)

Van string concatenatie naar template literals

Je bent gewend om een variabel met een string te tonen door het + teken.

Oude manier (string concatenatie):

let firstName = 'Klaas';

let text = 'Mijn naam is: ' + firstName;
console.log(text); // "Mijn naam is: Klaas"

Nieuwe manier (template literals):

let firstName = 'Klaas';

let text = `Mijn naam is: ${firstName}`;
console.log(text); // "Mijn naam is: Klaas"

Wat zijn backticks?

Backticks zijn schuine aanhalingstekens die je links van de 1 kunt vinden op je toetsenbord: `

  • Aanhalingstekens (' of ") = gebruikt om strings te maken
  • Backticks (`) = gebruikt om zowel variabelen als strings in 1 lijn te maken

Voordelen van template literals

1. Veel duidelijker dan + tekens

Oude manier (verwarrend):

let name = 'Jan';
let age = 25;
let city = 'Amsterdam';

let text = 'Hallo, ik ben ' + name + ', ik ben ' + age + ' jaar oud en woon in ' + city + '.';

Nieuwe manier (duidelijk):

let name = 'Jan';
let age = 25;
let city = 'Amsterdam';

let text = `Hallo, ik ben ${name}, ik ben ${age} jaar oud en woon in ${city}.`;

2. Meerdere regels mogelijk

Oude manier:

let html = '
' + '

' + title + '

' + '

' + content + '

' + '
';

Nieuwe manier:

let html = `
  

${title}

${content}

`;

3. Berekeningen in de string

let price = 19.99;
let quantity = 3;

let total = `Totaal: €${price * quantity}`;
console.log(total); // "Totaal: €59.97"

4. Functies aanroepen in de string

let name = 'jan';

let greeting = `Hallo ${name.toUpperCase()}!`;
console.log(greeting); // "Hallo JAN!"

querySelector

Van oude selectors naar querySelector

Om een element te selecteren heb je geleerd om verschillende methodes te gebruiken. Dit ga je vervangen door één methode: querySelector.

Oude manier

// Verschillende methodes voor verschillende selectors:
document.getElementById('myId');           // Voor ID
document.getElementsByTagName('div');     // Voor tag naam  
document.getElementsByClassName('myClass'); // Voor class naam

Nieuwe manier (querySelector)

// Één methode voor alle selectors:
document.querySelector('#myId');      // Voor ID (met #)
document.querySelector('div');        // Voor tag naam (zonder symbool)
document.querySelector('.myClass');   // Voor class (met .)

Hoe onthoud je welk symbool?

Selector type Symbool Voorbeeld
ID # querySelector('#myId')
Class . querySelector('.myClass')
Tag geen querySelector('div')
Geheugensteuntje: Dit zijn dezelfde symbolen als in CSS!
/* CSS */
#myId { }        /* ID met # */
.myClass { }     /* Class met . */ 
div { }          /* Tag zonder symbool */

Vergelijking oude vs nieuwe selector

Oude manier Nieuwe manier
document.getElementById('menu') document.querySelector('#menu')
document.getElementsByClassName('button') document.querySelector('.button')
document.getElementsByTagName('h1') document.querySelector('h1')

querySelector vs querySelectorAll

querySelector = geeft het eerste element terug

let firstButton = document.querySelector('.button'); // Alleen de eerste

querySelectorAll = geeft alle elementen terug (als NodeList)

let allButtons = document.querySelectorAll('.button'); // Alle buttons

// Door alle buttons loopen:
for (let button of allButtons) {
  button.addEventListener('click', () => {
    console.log('Button clicked!');
  });
}

Combinatie van alle moderne syntax

Hier is een voorbeeld dat alle moderne JavaScript syntax combineert:

// Data
const products = [
  { name: 'Laptop', price: 899 },
  { name: 'Phone', price: 599 },
  { name: 'Tablet', price: 399 }
];

// Arrow function met modern syntax
const displayProducts = () => {
  const container = document.querySelector('#products');
  let html = '';
  
  // For/of loop
  for (let product of products) {
    // Template literals
    html += `
      

${product.name}

Prijs: €${product.price}

`; } container.innerHTML = html; }; // Event listener met arrow function document.querySelector('#loadButton').addEventListener('click', () => { displayProducts(); });
In dit voorbeeld zie je:
  • const - Moderne variabelen declaratie
  • => - Arrow functions
  • for...of - Moderne loop door array
  • `${}` - Template literals voor strings met variabelen
  • querySelector() - Moderne DOM selectie

Tips voor moderne JavaScript

1. Arrow Functions

Gebruik altijd arrow functions voor nieuwe code

2. Template Literals

Gebruik template literals in plaats van string concatenatie

3. For...of Loop

Gebruik for...of voor arrays in plaats van traditionele for loops

4. querySelector

Gebruik querySelector voor alle DOM selecties

5. Oefen

Oefen met kleine voorbeelden voordat je grote projecten maakt

6. Backticks

Let op de backticks - ze staan links van de 1 op je toetsenbord

Moderne JavaScript is niet moeilijker - het is juist makkelijker en duidelijker!