Werken met variabelen en gegevenstypen in JavaScript

Zet je eerste stappen in JavaScript, de taal die webpagina's interactief maakt. Koppel scripts aan een HTML-pagina, sla waarden op met let en const en reken met getallen, strings en booleaanse waarden. Leer hoe JavaScript gegevenstypen converteert, zodat resultaten zoals "5" + 2, dat "52" oplevert, je niet meer verrassen. Neem beslissingen met vergelijkingen, logische operatoren, if/else en switch, en spoor fouten op en verhelp ze met de browserconsole en debugger.

BeginnerLes 1 van 9 in Cursus JavaScript programmeren: DOM, events, asynchrone code en modules

Wat je leert

  1. Koppel JavaScript aan een HTML-pagina, bepaal wanneer de code wordt uitgevoerd en gebruik de browserconsole om code uit te voeren en de uitvoer te bekijken.
    • Voeg JavaScript toe aan een HTML-pagina
      Koppel scripts met het <script>-element, inline of vanuit een apart bestand, en kies waar ze staan en hoe ze worden geladen.
    • Schrijf instructies en gebruik de console
      Schrijf instructies en commentaar, voer code uit in de browserconsole en toon uitvoer met console.log en de ingebouwde dialoogvensters van de browser.
  2. Declareer variabelen met duidelijke namen, kies tussen let en const en voorspel waar je elke variabele kunt gebruiken.
    • Declareer variabelen en geef ze een naam
      Maak variabelen met let en const, geef ze geldige en leesbare namen en werk de variabelen bij die veranderen.
    • Voorspel het bereik van variabelen en de foutmeldingen bij let en const
      Voorspel in welk deel van de code je een variabele kunt gebruiken en herken en verhelp de fouten die let en const opleveren.
  3. Herken de gegevenstypen van JavaScript, reken correct met getallen en bouw tekst op en wijzig die met strings en templateliterals.
    • Herken gegevenstypen met typeof
      Benoem de gegevenstypen van JavaScript, onderscheid null van undefined en controleer het type van elke waarde met typeof.
    • Reken met getallen en rekenkundige operatoren
      Gebruik de rekenkundige operatoren en toewijzingsoperatoren, pas operatorprioriteit toe, rond resultaten af en herken de beperkingen van drijvendekommagetallen en speciale getalswaarden.
    • Maak en wijzig strings
      Schrijf stringliterals, voeg aanhalingstekens en speciale tekens toe en gebruik de lengte, indexposities en veelgebruikte methoden van strings.
    • Bouw tekst op met templateliterals
      Voeg waarden en expressies in tekst in met strings tussen backticks, schrijf tekst over meerdere regels en maak getallen in berichten op.
  4. Converteer waarden bewust met Number(), String() en Boolean() en voorspel de automatische conversies die JavaScript uitvoert in operatoren en voorwaarden.
    • Converteer waarden expliciet
      Zet tekst om in getallen en andere waarden in strings of booleaanse waarden, en controleer of een conversie is gelukt.
    • Voorspel impliciete typeconversie
      Voorspel de resultaten van operatoren die op verschillende typen worden toegepast en gebruik truthy- en falsy-waarden bewust.
  5. Vergelijk waarden correct, combineer voorwaarden met logische operatoren en kies welke code wordt uitgevoerd met if, else, de voorwaardelijke operator en switch.
    • Vergelijk waarden
      Gebruik vergelijkingsoperatoren om true of false te krijgen en voorspel vergelijkingen van strings, verschillende typen, null, NaN en decimale getallen.
    • Combineer voorwaarden met logische operatoren
      Verbind voorwaarden en keer ze om met &&, || en !, gebruik kortsluitevaluatie en geef standaardwaarden op met || en ??.
    • Kies uitvoeringspaden met if, else, de voorwaardelijke operator en switch
      Schrijf ketens met if, else if en else, kies waarden met de voorwaardelijke operator en handel vaste gevallen af met switch.
  6. Lees foutmeldingen, volg waarden met console-uitvoer en onderbreek code in de browserdebugger om precies te zien wat die doet.
    • Lees foutmeldingen en volg waarden met de console
      Onderscheid syntaxisfouten, uitvoeringsfouten en logische fouten, lees wat een foutmelding zegt en gebruik getoonde waarden om te vinden waar een resultaat verkeerd gaat.
    • Onderbreek de uitvoering en doorloop code stap voor stap met de debugger
      Stel onderbrekingspunten in, doorloop code regel voor regel en inspecteer variabelen terwijl de uitvoering is onderbroken.

Variabelen en gegevenstypen in JavaScript: uitleg

6 hoofdstukken

1

Voer een script uit en bekijk de uitvoer

Een browser kan een berekening uitvoeren zodra je een pagina laadt, maar de code heeft een plaats nodig en een manier om het resultaat te tonen. Koppel een script aan HTML, kies wanneer het wordt uitgevoerd en gebruik de console om de meldingen te bekijken. Kleine experimenten in de console helpen je de taal te leren voordat je pagina-elementen wijzigt. Je leest ook wat het verschil is tussen de waarde van een expressie en een melding die een programma toont.

1.1 Koppel JavaScript aan HTML

HTML geeft een pagina structuur, CSS bepaalt het uiterlijk en JavaScript voegt gedrag toe. De JavaScript-engine van een browser voert de instructies in een script uit. Tenzij een beslissing het uitvoeringspad verandert, worden die instructies van boven naar beneden uitgevoerd.

Plaats code in de pagina of in een apart bestand

Een inlinescript bevat JavaScript tussen een openings- en sluitingstag:

<script>
  console.log("Hello from the page");
</script>

Een extern script bewaart de JavaScript in een apart .js-bestand. Deze HTML laadt het bestand:

<script src="js/app.js"></script>

Het externe bestand bevat console.log("Hello from the page"); zonder <script>-tags. Door de bestanden te scheiden blijft de HTML leesbaar, kunnen meerdere pagina's code delen en kan de browser het script in de cache bewaren. Als src aanwezig is, wordt code binnen hetzelfde element genegeerd. Gebruik één aanpak per element en schrijf altijd de sluitingstag </script>: een zelfsluitende <script ... /> sluit het element niet in HTML.

Kies wanneer het script wordt uitgevoerd

Een klassiek script zonder laadattribuut stopt het ontleden van de HTML terwijl de browser het script laadt en uitvoert. In <head> wordt het uitgevoerd voordat de latere inhoud van de body is opgebouwd. Als je het vlak voor </body> plaatst, komt de pagina-inhoud ervoor.

Voor een extern klassiek script in <head> is defer een bruikbare standaardkeuze:

<script src="js/app.js" defer></script>

De browser downloadt het script terwijl hij de HTML blijft ontleden. Het script wordt uitgevoerd nadat het ontleden is voltooid. Meerdere uitgestelde scripts worden in hun HTML-volgorde uitgevoerd, zodat een tweede script waarden kan gebruiken die door het eerste zijn ingesteld.

LaadkeuzeWanneer het script wordt uitgevoerdVolgorde van meerdere scripts
Klassiek, zonder attribuutWanneer het ontleden het script bereikt, na het ladenHTML-volgorde
deferNa het ontleden van de HTMLHTML-volgorde
asyncZodra het downloaden is voltooidVolgorde waarin downloads worden voltooid

Gebruik async voor onafhankelijke code die niet afhangt van een volledig opgebouwde pagina of een ander script. defer toevoegen aan een klassiek inlinescript heeft geen effect.

Laad een module
<script type="module" src="js/main.js"></script>

Een module wordt standaard uitgesteld uitgevoerd en draait in strikte modus. Een module kan code delen via import en export. Om modules in Chrome of Firefox te laden, maak je het project beschikbaar via een lokale ontwikkelserver, zoals de live-serverfunctie van een editor. Als je de pagina opent op een file://-adres, gelden er beperkingen voor het laden van modules.

Controleer de koppeling

Stel dat index.html naast een map js staat die greet.js bevat. Zet console.log("Page ready"); in dat script en <script src="js/greet.js" defer></script> in de head van de HTML. Open de pagina en daarna de console: de melding is “Page ready”.

Het relatieve pad begint vanuit de map van het HTML-bestand. In deze indeling wijst src="greet.js" naar de verkeerde plaats. Een melding dat het bestand ontbreekt, betekent dat er op dat adres geen script is om uit te voeren. Als je de HTML-tags naar het JavaScript-bestand hebt gekopieerd, meldt de engine daarentegen een syntaxisfout bij de opmaak.

Belangrijkste punten

  • Een extern script gebruikt src; het JavaScript-bestand bevat code zonder HTML-tags.
  • Een relatief scriptpad begint vanuit de map van het HTML-bestand.
  • Een uitgesteld extern klassiek script wordt na het ontleden uitgevoerd; uitgestelde scripts behouden de HTML-volgorde.
  • Een async-script wordt uitgevoerd zodra het klaar is, dus voor afhankelijke scripts is een andere laadkeuze nodig.
  • Modules worden standaard uitgesteld uitgevoerd en gebruiken strikte modus.
  • Een scriptelement heeft een sluitingstag </script> nodig.

1.2 Schrijf instructies en bekijk de console

De browserconsole toont meldingen, fouten en de resultaten van code die je typt. Open de console voor de pagina die je test. Gebruik in Chrome of Edge Ctrl+Shift+J op Windows/Linux of Cmd+Option+J op Mac. Gebruik in Firefox Ctrl+Shift+K of Cmd+Option+K. Met F12 open je in Chrome en Edge de ontwikkelaarstools als geheel.

Instructies en expressies

Een expressie levert een waarde op: 4 + 5 levert 9 op. Een instructie geeft een opdracht, zoals die waarde opslaan of tonen:

let total = 4 + 5;
console.log("Total:", total);

De eerste regel wordt vóór de tweede uitgevoerd, die “Total: 9” toont. Een puntkomma sluit een instructie af. JavaScript kan veel weggelaten puntkomma's invoegen, maar regeleinden werken niet altijd als scheidingsteken. Sluit instructies af met puntkomma's om de bedoelde structuur duidelijk te maken.

Typ 2 + 3 in de console en druk op Enter om 5 te zien. Gebruik Shift+Enter voor een nieuwe regel zonder de invoer uit te voeren. Als je let x = 5; invoert, kan de console undefined tonen als resultaat van die instructie. Dat betekent niet dat x de waarde undefined bevat: als je daarna x invoert, verschijnt 5. Evenzo toont een aanroep van console.log() de melding en geeft de aanroep zelf undefined terug.

Namen en commentaar

JavaScript is hoofdlettergevoelig. console.log("Hi"); werkt, maar Console.log("Hi"); verwijst naar een andere naam en veroorzaakt een ReferenceError. console.Log("Hi"); vindt console, maar mislukt met een TypeError omdat er geen aanroepbare methode Log is.

Commentaar is voor lezers. De engine slaat het over:

// Keep the starting value for the next calculation.
let total = 4;
/* A comment can also
   continue on another line. */
console.log(total);

Door // vóór een instructie te plaatsen, schakel je die regel tijdelijk uit. Nuttig commentaar legt een reden uit die de code zelf niet duidelijk maakt.

Meldingen, waarschuwingen en experimenten

console.log("Total:", 9); toont de argumenten gescheiden door spaties. console.warn() markeert een waarschuwing; console.error() markeert een foutmelding. Uitvoer tonen met console.error() werpt op zichzelf geen uitzondering op. console.clear() maakt de weergave leeg.

Invoer in de console dient om te experimenteren en wordt niet als wijziging opgeslagen. Bij opnieuw laden worden de opgeslagen scripts van de pagina opnieuw uitgevoerd. Je kunt variabelen op het hoogste niveau van klassieke scripts in de console inspecteren; variabelen op het hoogste niveau van een module blijven binnen die module.

Eenvoudige dialoogvensters en strikte modus

alert("Saved!"); toont een melding. confirm("Continue?") geeft true terug bij OK en false bij Annuleren. prompt("Quantity?", "1") geeft de ingevoerde string terug, of null bij Annuleren. Als je 12 typt, krijg je "12", niet 12. Deze dialoogvensters onderbreken de interactie zolang ze openstaan.

Zet "use strict"; aan het begin van een klassiek script om bepaalde fouten te laten melden. Zo veroorzaakt totl = 5; zonder declaratie een ReferenceError in strikte modus; in een klassiek script zonder strikte modus kan dit onbedoeld een globale variabele maken. Een module gebruikt al strikte modus. Controleer de spelling en declareer namen voordat je er waarden aan toewijst.

Belangrijkste punten

  • Invoer in de console evalueert expressies en console.log() toont meldingen.
  • De undefined die bij een declaratie wordt getoond, staat los van de waarde die in de variabele is opgeslagen.
  • Namen zijn hoofdlettergevoelig; commentaar wordt tijdens de uitvoering overgeslagen.
  • prompt() geeft tekst of null terug en confirm() geeft een booleaanse waarde terug.
  • Strikte modus meldt toewijzingen aan niet-gedeclareerde namen als fouten.
2

Sla waarden op en bepaal waar namen werken

Variabelen geven waarden namen die de rest van je programma kan gebruiken. Je keuze voor const of let laat een lezer zien of aan een naam opnieuw een waarde wordt toegewezen. Ook de plaats waar je een variabele declareert, is van belang: een waarde die binnen een blok is gemaakt, kan daarbuiten onbereikbaar zijn. Volg een klein tussentotaal en doorloop daarna geneste blokken om te zien naar welke variabele elke naam verwijst en waarom declaratiefouten verschillende meldingen opleveren.

2.1 Declareer waarden, wijs ze toe en werk ze bij

Een variabele is een naam die naar een waarde verwijst. Je kunt de naam eerst declareren en de waarde later toewijzen, of beide in één instructie doen. De toewijzingsoperator = slaat de waarde rechts op onder de naam links.

Kies let of const
let score;
console.log(score); // undefined
score = 10;
score = score + 2;
console.log(score); // 12

let score; declareert de variabele. Totdat een toewijzing de variabele een andere waarde geeft, bevat die undefined. De volgende toewijzing slaat 10 op. In score = score + 2; leest JavaScript de oude score, telt er 2 bij op en slaat vervolgens 12 op. Dit is een bijwerkinstructie en hoeft dus als wiskundige vergelijking niet te kloppen. Bij hertoewijzing gebruik je de bestaande naam zonder opnieuw let te schrijven.

Een const-declaratie moet een beginwaarde bevatten:

const BOILING_POINT_C = 100;

De declaratie const rate; is een syntaxisfout omdat een initialisatie ontbreekt. Als je later een nieuwe waarde aan BOILING_POINT_C probeert toe te wijzen, veroorzaakt dat een TypeError.

DeclaratieBeginwaarde nodig?Kan aan de naam opnieuw een waarde worden toegewezen?
letNeeJa
constJaNee

Gebruik standaard const. Kies let voor een tussentotaal, een teller of een resultaat dat latere instructies zullen toewijzen. Ook voor een waarde die uit andere waarden wordt berekend, kun je const gebruiken als het programma nooit opnieuw een waarde aan die naam toewijst.

Geef de naam een duidelijke betekenis

Namen mogen letters, cijfers, _ en $ bevatten; ze mogen niet met een cijfer beginnen. place1 is geldig, maar 1stPlace niet. Spaties zijn verboden en een koppelteken wordt gelezen als een aftrekking, dus total-price is niet de naam van één variabele. Gereserveerde woorden zoals if, return en class kunnen geen variabelenamen zijn.

Gebruik camelCase voor gewone namen: itemCount, firstName of priceWithTax. Booleaanse namen zoals isLoggedIn en hasDiscount beschrijven een ja-neewaarde. Vermeld eenheden als ze verwarring voorkomen: distanceKm en durationMin. Voor vaste waarden die bekend zijn voordat het programma wordt uitgevoerd, wordt vaak UPPER_SNAKE_CASE gebruikt, zoals MAX_LOGIN_ATTEMPTS. Hoofdletters en kleine letters maken verschil: total en Total zijn verschillende namen.

Werk een tussentotaal uit
const TAX_RATE = 0.2;
let total = 0;
total = total + 12.5;
total = total + 7.5;
const totalWithTax = total * (1 + TAX_RATE);
console.log(totalWithTax); // 24

Het totaal begint bij 0, wordt 12.5 en daarna 20. De vermenigvuldigingsfactor 1 + TAX_RATE is 1.2, dus het eindbedrag is 24. Alleen aan total hoeft opnieuw een waarde te worden toegewezen. Het belastingtarief en het berekende eindbedrag gebruiken const.

Als je let total = 7.5; een tweede keer binnen hetzelfde bereik schrijft, probeer je een tweede variabele te declareren in plaats van de eerste bij te werken. Gebruik total = 7.5; om de waarde te vervangen.

Herken oudere declaraties

Oudere code gebruikt vaak var. Dat werkt nog steeds, maar de variabelen horen bij een functie of script in plaats van bij een gewoon genest blok. Herhaalde declaraties zijn toegestaan en lezen vóór de declaratie levert undefined op. Het moderne let en const signaleren deze fouten. Houd hun regels in gedachten wanneer je een oudere handleiding leest die var gebruikt.

Belangrijkste punten

  • = berekent de rechterkant en slaat de waarde daarna op onder de naam links.
  • Gebruik standaard const en gebruik let wanneer de code opnieuw een waarde aan de naam zal toewijzen.
  • Een const-declaratie vereist een beginwaarde.
  • Wijs opnieuw een waarde toe aan een bestaande variabele zonder het declaratiesleutelwoord te herhalen.
  • Beschrijvende camelCase-namen kunnen de betekenis en eenheden aangeven.

2.2 Volg het bereik en onderzoek declaratiefouten

Een blok is de code tussen accolades, zoals de inhoud van een if. Het bereik van een variabele is het gebied waar de naam naar die variabele verwijst. Zowel let als const heeft blokbereik, inclusief eventuele geneste blokken binnen het blok waarin de variabele is gedeclareerd.

Bewaar een resultaat waar het nodig is
const temperatureC = 31;
let label;
if (temperatureC > 30) {
  label = "hot";
} else {
  label = "mild";
}
console.log(label); // hot

label is buiten de takken gedeclareerd, zodat de laatste regel de variabele kan lezen. Elke tak wijst een waarde toe aan de bestaande variabele. Als je in plaats daarvan const label = "hot"; binnen de eerste tak declareert, kun je die variabele na het blok niet lezen. Als er geen andere label binnen het bereik is, veroorzaakt de laatste lezing een ReferenceError.

Een declaratie op het hoogste niveau van een klassiek script heeft globaal bereik: latere code in dat script en de andere klassieke scripts van de pagina kunnen de variabele gebruiken. In een module horen variabelen op het hoogste niveau bij die module. Bewaar een variabele in het kleinste bereik dat die nodig heeft om naamconflicten te beperken.

Onderscheid overschaduwing van hertoewijzing
let x = 1;
{
  let x = 2;
  console.log(x); // 2
}
console.log(x); // 1

De binnenste declaratie maakt een afzonderlijke variabele. Dit is overschaduwing: binnen het binnenste blok verwijst x naar de binnenste variabele. De buitenste variabele blijft 1. Als je de binnenste let zou weghalen, zou je in plaats daarvan 2 aan de buitenste variabele toewijzen. Verschillende namen maken dit verschil gemakkelijker leesbaar.

Lees vóór initialisatie

Een binding met blokbereik bestrijkt het hele blok, maar je kunt die pas gebruiken zodra de declaratie de binding initialiseert. Het gebied vóór de initialisatie is de tijdelijke dode zone:

console.log(price);
let price = 5;

Dit veroorzaakt ReferenceError: Cannot access 'price' before initialization. De naam bestaat binnen het bereik, maar is niet klaar voor gebruik. Ter vergelijking: price is not defined betekent dat daar geen binding met die naam kan worden gevonden. Een binnenste declaratie overschaduwt een buitenste naam ook vóór de binnenste declaratieregel; de buitenste waarde kan de tijdelijke dode zone van de binnenste variabele niet omzeilen.

Koppel elke fout aan een oplossing
ProbleemFouttypeOplossing
const rate;SyntaxErrorGeef een beginwaarde op
Een tweede let total binnen één bereikSyntaxErrorWijs een waarde toe zonder nogmaals let
Lezen vóór initialisatieReferenceErrorInitialiseer vóór het lezen
Een onbekende naam of een naam buiten bereik lezenReferenceErrorVerbeter de naam of verplaats de declaratie
Opnieuw een waarde toewijzen aan een constTypeErrorGebruik let als hertoewijzing nodig is

Syntaxisfouten verhinderen dat het script start. Een uitvoeringsfout stopt de huidige uitvoering zodra die de instructie bereikt die de fout veroorzaakt. Chrome staat voor het gemak nog een let-declaratie toe in een afzonderlijke console-invoer; dat maakt dubbele declaraties in een script niet geldig.

Const legt de referentie vast

Primitieve waarden zoals getallen en strings kunnen niet ter plekke veranderen. De inhoud van een object kan veranderen, ook als de naam const gebruikt:

const settings = { theme: "dark" };
settings.theme = "light"; // allowed

De naam verwijst nog steeds naar hetzelfde object. Als je settings = {}; toewijst, probeer je die referentie te vervangen en ontstaat een TypeError.

Belangrijkste punten

  • Namen met let en const hebben als bereik het blok waarin ze staan.
  • Declareer een gedeeld resultaat vóór de takken die er een waarde aan toewijzen.
  • Overschaduwing maakt een afzonderlijke variabele; hertoewijzing verandert de bestaande variabele.
  • Lezen in de tijdelijke dode zone mislukt, hoewel de binding binnen dat bereik bestaat.
  • Dubbele declaraties zijn syntaxisfouten, terwijl hertoewijzing van een const tijdens de uitvoering een TypeError geeft.
  • De inhoud van een object met const kan veranderen zonder dat aan de naam opnieuw een waarde wordt toegewezen.
3

Reken met waarden en bouw tekst op

Het type van een waarde helpt verklaren wat een bewerking doet. Getallen maken berekeningen mogelijk, strings bevatten tekst en booleaanse waarden bevatten true of false. Leer die typen te inspecteren, de volgorde van berekeningen te bepalen en de resultaten van stringmethoden op te slaan. Met templateliterals kun je vervolgens waarden combineren tot leesbare berichten. Exacte console-uitvoer laat zien waar tekst, getallen, afronding en opmaak zich verschillend gedragen.

3.1 Bepaal het type van een waarde

De waarden 7, "7" en true hebben verschillende typen. Ze kunnen op vergelijkbare plaatsen op een pagina verschijnen, maar JavaScript past op elk daarvan andere regels toe. Een type beschrijft de waarde die een variabele op dat moment bevat, geen blijvende beperking van die variabele.

Begin met de drie belangrijkste typen

Een number stelt gehele en decimale getalswaarden voor: 42, -7 en 3.75 hebben allemaal hetzelfde type. Ook wetenschappelijke notatie is numeriek: 1e3 betekent 1000. Een string bevat tekst tussen aanhalingstekens, dus "42" is tekst, ook al zijn de tekens cijfers. Een boolean is precies true of false, zonder aanhalingstekens. Vergelijkingen leveren booleaanse waarden op die een programma kan gebruiken om beslissingen te nemen.

Gebruik typeof om een waarde te inspecteren. De operator geeft een string terug die het type noemt:

console.log(typeof 7);         // number
console.log(typeof "7");       // string
console.log(typeof true);      // boolean
console.log(typeof undefined); // undefined

Het commentaar toont de woorden die worden weergegeven; de resultaten zelf zijn strings zoals "number".

Herken ontbrekende waarden
let city;
let middleName = null;
console.log(city);       // undefined
console.log(middleName); // null

undefined betekent meestal dat JavaScript geen waarde heeft gekregen, zoals bij een niet-geïnitialiseerde let. null wordt meestal bewust toegewezen om “leeg” of “geen waarde” aan te geven. Test op een bewust lege waarde met middleName === null.

Gebruik typeof value === "object" niet om op null te testen. typeof null geeft "object" door historisch gedrag van de taal, ook al is null een primitieve waarde.

Ken de volledige lijst met typen

JavaScript heeft zeven primitieve typen: number, string, boolean, undefined, null, bigint en symbol. Het achtste type is object, dat voor gestructureerde waarden wordt gebruikt. Functies zijn objecten die kunnen worden aangeroepen, hoewel typeof daarvoor "function" meldt.

Een bigint is een geheel getal dat met een afsluitende n wordt geschreven, zoals 9007199254740993n. Het type ondersteunt grote exacte gehele getallen. Combineer een bigint en een number niet in een berekening: 1n + 2 veroorzaakt TypeError. Een symbol is een unieke identificatie; typeof Symbol("id") geeft "symbol". typeof 42n geeft "bigint".

NaN is een ander speciaal resultaat dat je moet herkennen: ondanks de naam, “geen getal”, is typeof NaN gelijk aan "number". Het is een getalswaarde die een ongeldig getalsresultaat aangeeft. De naam alleen duidt geen afzonderlijk type aan.

Volg een veranderende variabele
let data = 42;
console.log(typeof data); // number
data = "forty-two";
console.log(typeof data); // string

Dit is dynamische typering. Door hertoewijzing kan een string een getal vervangen. Door die flexibiliteit is het handig om bij een verrassend resultaat zowel de waarde als het type te tonen:

const input = "7";
console.log(input, typeof input); // 7 string
console.log(input + 1);           // 71
console.log(7 + 1);               // 8

De eerste optelling voegt tekst samen; de tweede telt getallen op. Primitieve waarden kunnen niet ter plekke veranderen: een bewerking maakt een nieuwe waarde. Als je een variabele bijwerkt, verander je naar welke waarde die verwijst.

Belangrijkste punten

  • Waarden hebben typen; een let-variabele kan na hertoewijzing verschillende typen bevatten.
  • typeof geeft een string terug die het type van een waarde noemt.
  • undefined betekent vaak dat geen waarde is toegewezen; null geeft meestal een bewust ontbrekende waarde aan.
  • typeof null is "object" en typeof NaN is "number".

3.2 Beheers berekeningen en getalsresultaten

JavaScript gebruikt één gewoon getalstype voor gehele en decimale waarden. Bij delen blijft een deel achter de komma behouden: 10 / 4 geeft 2.5. Zowel de operator die je kiest als de volgorde waarin die wordt uitgevoerd, beïnvloedt het resultaat.

Reken in de bedoelde volgorde
OperatorBetekenisVoorbeeld
+, -Optellen, aftrekken8 - 3 geeft 5
*, /Vermenigvuldigen, delen7 / 2 geeft 3.5
%Rest17 % 5 geeft 2
**Machtsverheffen2 ** 3 geeft 8

Machtsverheffen gaat vóór vermenigvuldigen, delen en de rest bepalen; die gaan weer vóór optellen en aftrekken. Operatoren op hetzelfde niveau worden van links naar rechts uitgevoerd, behalve machtsverheffen, dat van rechts naar links wordt gegroepeerd: 2 ** 3 ** 2 is 2 ** 9, oftewel 512. Haakjes veranderen die volgorde: 2 + 3 * 4 geeft 14, maar (2 + 3) * 4 geeft 20.

Voor het gemiddelde van 72, 85 en 90 tel je de hele groep op voordat je deelt:

const average = (72 + 85 + 90) / 3;
console.log(average); // 82.33333333333333

Zonder haakjes deelt 72 + 85 + 90 / 3 alleen 90 en geeft de berekening 187.

Splits hele eenheden en resten

Math.trunc(7 / 2) laat het deel achter de komma weg en geeft 3. Voor een positieve lengte van 245 cm geeft Math.floor(245 / 100) 2 meter en geeft 245 % 100 45 resterende centimeters. Evenzo geeft 3725 seconden 1 uur met Math.floor(3725 / 3600), 2 minuten met Math.floor((3725 % 3600) / 60) en 5 seconden met 3725 % 60. Voor een geheel getal test n % 2 === 0 of het even is. Een rest heeft het teken van de linkeroperand: -7 % 3 geeft -1.

Werk een getal bij

x += 5 betekent x = x + 5. De operatoren -=, *=, /=, %= en **= volgen hetzelfde patroon. Als je begint bij 10, geven de bijwerkingen += 5, *= 2, -= 4 en daarna /= 2 achtereenvolgens 15, 30, 26 en 13.

++ verhoogt met één en -- verlaagt met één. Bij let a = 5; let b = a++; wordt a gelijk aan 6, maar krijgt b de waarde 5: de postfixvorm geeft de oude waarde terug. Bij let b = ++a;, opnieuw beginnend met a = 5, worden beide 6. Door een bijwerking op een eigen regel te zetten, hoef je niet op dat expressieresultaat te vertrouwen.

Rond bewust af en maak bewust op
HulpmiddelRegel voor het resultaatVoorbeeld
Math.round()Dichtstbijzijnde gehele getal; helften naar positieve oneindigheidMath.round(-2.5) geeft -2
Math.floor()Naar beneden, richting negatieve oneindigheidMath.floor(-2.5) geeft -3
Math.ceil()Naar boven, richting positieve oneindigheidMath.ceil(2.1) geeft 3
Math.trunc()Laat het deel achter de komma weg, richting nulMath.trunc(-2.7) geeft -2

Math.round(13.456 * 100) / 100 geeft het getal 13.46. Daarentegen geeft (3.14159).toFixed(2) de string "3.14" en geeft (19.999).toFixed(2) de string "20.00". Maak pas aan het einde op: als je een getal bij een opgemaakte string optelt, wordt tekst samengevoegd.

Herken de grenzen van getallen

Getallen gebruiken 64-bits binaire drijvendekommaweergave. De meeste decimale breuken zijn benaderingen, dus 0.1 + 0.2 is 0.30000000000000004. Rond af voor de weergave, vergelijk met een geschikte kleine tolerantie of reken in hele eenheden zoals centen of millimeters.

Sommige ongeldige bewerkingen geven een waarde terug in plaats van een uitzondering op te werpen: 5 / 0 is Infinity, -5 / 0 is -Infinity en 0 / 0 of "abc" * 2 is NaN. De meeste berekeningen met NaN blijven NaN; NaN ** 0 is een uitzondering en geeft 1.

Elk geheel getal tot en met Number.MAX_SAFE_INTEGER, 9007199254740991, is exact. Daarboven kunnen slechts sommige gehele getallen worden weergegeven: 9007199254740992 + 1 geeft nog steeds 9007199254740992. Bigints ondersteunen grotere exacte gehele getallen.

Belangrijkste punten

  • Met haakjes kun je een hele som als invoer voor een deling gebruiken.
  • % geeft een rest; bij delen alleen blijft het deel achter de komma behouden.
  • Postfixincrement geeft de oude waarde terug; prefixincrement geeft de nieuwe waarde terug.
  • Floor, ceil, round en trunc verschillen bij negatieve waarden.
  • toFixed() levert tekst voor de weergave op.
  • Decimale berekeningen kunnen benaderingen zijn, zelfs bij eenvoudig ogende invoer.
  • NaN en oneindige waarden zijn speciale waarden van het type number.

3.3 Lees, doorzoek en transformeer tekst

Een string bewaart tekst tussen bij elkaar passende enkele aanhalingstekens, dubbele aanhalingstekens of backticks. Voor gewone tekst kunnen alle drie dezelfde waarde weergeven. De aanhalingstekens geven aan waar de tekst begint en eindigt; ze maken geen deel uit van die waarde.

Aanhalingstekens, escapesequenties en samenvoegen

Gebruik het andere soort aanhalingsteken om een aanhalingsteken op te nemen: "It's late". Een escapesequentie gebruikt een backslash, zoals in 'It\'s late'. \n staat voor een regeleinde, \t voor een tab en \\ voor een backslash. De escapesequentie \n neemt één positie in de string in, ook al typ je twee tekens om die te schrijven. "It's".length is 4; "Line 1\nLine 2".length is 13.

De operator + voegt strings samen. "Hello" + " " + "world" geeft "Hello world"; er wordt geen spatie ingevoegd tenzij een van de delen die bevat. Bij let msg = "Hi"; msg += " there"; is de bijgewerkte waarde "Hi there".

Posities beginnen bij nul
const language = "JavaScript";
console.log(language.length); // 10
console.log(language[0]);     // J
console.log(language[4]);     // S
console.log(language[9]);     // t
console.log(language.at(-1)); // t
console.log(language[10]);    // undefined

De laatste index is length - 1. Een negatief argument voor at() telt vanaf het einde. length is een eigenschap, geen methode: language.length() veroorzaakt TypeError. Preciezer gezegd gebruiken stringposities en length UTF-16-code-eenheden, de eenheden waarmee JavaScript tekst opslaat. Deze gewone Engelse letters nemen elk één eenheid in; sommige symbolen en emoji nemen er meer in.

Sla de nieuwe string op

Strings zijn onveranderlijk: je kunt hun inhoud niet ter plekke wijzigen. Als je word[0] = "b" toewijst terwijl word gelijk is aan "cat", ontstaat geen "bat"; in strikte modus wordt een uitzondering opgeworpen. Methoden die tekst transformeren, geven een nieuwe string terug:

let name = "ana";
name.toUpperCase();
console.log(name); // ana
name = name.toUpperCase();
console.log(name); // ANA

De methode aanroepen is niet genoeg om het resultaat te bewaren. Als je name.toUpperCase zonder haakjes schrijft, roep je de methode helemaal niet aan.

Kies de juiste tekstbewerking

toLowerCase() en toUpperCase() veranderen hoofdletters in kleine letters of andersom; trim() verwijdert witruimte aan beide uiteinden. Bij aaneenschakelen werkt elke methode op het vorige resultaat: " Ana@Example.com ".trim().toLowerCase() geeft "ana@example.com".

includes(), startsWith() en endsWith() geven booleaanse waarden terug. Zo geeft "report.pdf".endsWith(".pdf") de waarde true. indexOf() geeft de eerste overeenkomende positie of -1: "JavaScript".indexOf("S") geeft 4, maar zoeken naar "s" geeft -1. Zoekopdrachten zijn hoofdlettergevoelig. "JavaScript".includes("script") is false; converteer vóór die zoekopdracht naar kleine letters om true te krijgen.

slice(start, end) geeft tekst terug vanaf de startindex tot aan, maar zonder, de eindindex. "JavaScript".slice(0, 4) geeft "Java"; .slice(4) en .slice(-6) geven "Script".

"a-b-c".replace("-", "+") geeft "a+b-c"; replaceAll() met dezelfde argumenten geeft "a+b+c". "ab".repeat(3) geeft "ababab" en "5".padStart(3, "0") geeft "005". Bij const city = "paris"; levert city[0].toUpperCase() + city.slice(1) de waarde "Paris" op door een hoofdletter als eerste letter samen te voegen met de ongewijzigde rest.

Belangrijkste punten

  • Strings hebben bij elkaar passende aanhalingstekens nodig en concatenatie voegt zelf geen spaties toe.
  • De eerste index is nul en de index van de laatste gewone letter is length - 1.
  • length is een eigenschap; methoden worden met haakjes aangeroepen.
  • Methoden die tekst transformeren, leveren nieuwe strings op, dus sla de resultaten op.
  • Zoekopdrachten in strings maken onderscheid tussen hoofdletters en kleine letters.
  • slice() sluit de eindindex uit.

3.4 Voeg waarden in leesbare berichten in

Een templateliteral plaatst tekst tussen backticks. Daarin markeert ${...} een plaatsaanduiding waarvan de expressie wordt geëvalueerd en in de tekst ingevoegd. Dat is handig als een bericht meerdere waarden combineert met leestekens, spaties of berekeningen.

Lees een plaatsaanduiding als een expressie
const name = "Ana";
const greeting = `Hello, ${name}!`;
console.log(greeting); // Hello, Ana!

De engine leest name, krijgt "Ana" en plaatst die waarde tussen de begroeting en het uitroepteken. De backticks en symbolen van de plaatsaanduiding beschrijven de string; ze verschijnen niet in het resulterende bericht.

Met concatenatie wordt hetzelfde idee "Hello, " + name + "!". Een langer bericht zoals "Hello, " + name + "! You have " + count + " new messages." vereist meerdere afzonderlijke delen tussen aanhalingstekens. Een template houdt de hele zin bij elkaar: `Hello, ${name}! You have ${count} new messages.`. Je moet spaties nog steeds typen waar je ze wilt hebben.

Bereken en maak daarna op binnen de plaatsaanduiding
const name = "Ana";
const tickets = 3;
const price = 4.5;
const receipt = `${name} bought ${tickets} tickets for ${(tickets * price).toFixed(2)} in total.`;
console.log(receipt);

De uitvoer is “Ana bought 3 tickets for 13.50 in total.” Eerst levert tickets * price de waarde 13.5 op. Door de haakjes wordt het hele product de waarde waarop .toFixed(2) wordt toegepast, wat "13.50" oplevert. De plaatsaanduiding voegt die tekst in de zin in. De numerieke variabelen price en tickets blijven ongewijzigd.

Zonder opmaak toont een plaatsaanduiding de gewone tekstvorm van het getal. `${0.1 + 0.2}` geeft "0.30000000000000004". Als je het getal binnen de plaatsaanduiding opmaakt, geeft `${(0.1 + 0.2).toFixed(2)}` de waarde "0.30".

Expressies passen; instructies niet

Een plaatsaanduiding kan een waarde, een berekening, een methodeaanroep of een expressie bevatten die een waarde kiest. Bij birthYear = 1990 geeft `You turn ${2026 - birthYear} this year.` de uitvoer “You turn 36 this year.”

De voorwaardelijke operator kan tekst in het enkelvoud of meervoud kiezen:

const count = 1;
console.log(`You have ${count} ${count === 1 ? "item" : "items"}`);
// You have 1 item

De vergelijking kiest één string om in te voegen. Een if-instructie kan die expressie binnen ${...} niet vervangen, omdat een plaatsaanduiding een expressie nodig heeft die een waarde oplevert.

Behoud de exacte leestekens

Alleen backticks activeren plaatsaanduidingen. Bij const n = 5; is "n + 1 = ${n + 1}" gewone tekst en blijft ${n + 1} ongewijzigd. De template `n + 1 = ${n + 1}` geeft “n + 1 = 6”. Een backtick is een ander teken dan een enkel aanhalingsteken.

Regeleinden die je tussen backticks typt, worden regeleinden in de resulterende string. Spaties voor inspringing worden er ook onderdeel van. Ontbrekende waarden worden als tekst ingevoegd: `${undefined}` geeft "undefined", terwijl `${null}` de waarde "null" geeft. Als een bericht onverwacht “undefined” bevat, inspecteer dan de ingevoegde variabele en de plaats waar er een waarde aan is toegewezen.

Belangrijkste punten

  • Backticks activeren plaatsaanduidingen ${...}.
  • Een plaatsaanduiding evalueert een expressie en voegt de tekstvorm ervan in.
  • Maak een berekend getal binnen de plaatsaanduiding op als het bericht een vast aantal decimalen nodig heeft.
  • Strings tussen aanhalingstekens laten de symbolen van plaatsaanduidingen ongewijzigd.
  • Regeleinden en inspringing in templates worden onderdeel van de string.
4

Converteer invoer en voorspel automatische veranderingen

Tekst die een gebruiker invoert, moet vaak een getal worden voordat een berekening kan werken. JavaScript converteert waarden ook zelf en de optelregel kan van een bedoeld totaal samengevoegde tekst maken. Leer een conversie te kiezen, te controleren op ontbrekende of ongeldige invoer en een expressie in evaluatievolgorde te volgen. Dezelfde waarden worden dan ook begrijpelijk wanneer ze als voorwaarden in plaats van als getallen worden gebruikt.

4.1 Converteer invoer zonder de betekenis te verliezen

Expliciete typeconversie betekent dat je de conversie zelf schrijft met een hulpmiddel zoals Number(), String() of Boolean(). Daarmee maak je het bedoelde type zichtbaar op het punt waar een waarde de berekening binnenkomt.

Kies een conversie naar een getal

Number() leest de hele tekst als een getal en negeert witruimte eromheen. Number("1.5") geeft 1.5 en Number(" 12 ") geeft 12. Number("12px") geeft NaN omdat niet de hele string numeriek is. Code gebruikt een decimale punt: Number("1,5") geeft ook NaN.

parseInt() en parseFloat() lezen een getal aan het begin en stoppen wanneer de tekst niet meer past. parseInt("12px", 10) geeft 12; parseFloat("3.75 kg") geeft 3.75. De functie voor gehele getallen stopt bij de decimale punt, dus parseInt("0.5", 10) geeft 0. parseInt("abc", 10) geeft NaN omdat er geen getal aan het begin staat. Geef een grondtal door aan parseInt(): parseInt("08", 10) geeft 8, terwijl parseInt("ff", 16) hexadecimaal leest en 255 geeft.

De unaire plus converteert ook gewone numerieke tekst: +"42" geeft 42.

Houd ontbrekende invoer apart van nul

Een prompt geeft een string of null terug. Annuleren geeft null terug en een leeg vak bevestigen geeft "" terug. Beide worden door Number() nul, net als tekst die alleen uit witruimte bestaat. Controleer vóór het converteren of invoer ontbreekt:

const input = prompt("Enter a quantity:");
if (input === null || input.trim() === "") {
  console.log("No quantity entered.");
} else {
  const quantity = Number(input);
  if (Number.isNaN(quantity)) {
    console.log("Please type a number.");
  } else {
    console.log(quantity + 1);
  }
}

De || slaat de aanroep van trim() over wanneer input gelijk is aan null. Als je “12” typt, wordt de numerieke berekening bereikt en verschijnt 13. Als je “12px” typt, verschijnt de melding voor een ongeldig getal. “0” typen is een geldig antwoord en toont 1.

Gebruik Number.isNaN(value) om op een echte NaN-waarde te testen. value === NaN slaagt nooit. De oudere globale functie isNaN() converteert eerst het argument: isNaN("hello") is true, maar Number.isNaN("hello") is false omdat die waarde nog steeds een string is.

Converteer naar tekst of een booleaanse waarde

String(42) geeft "42", String(true) geeft "true" en String(null) geeft "null". (42).toString() levert ook "42" op, maar .toString() aanroepen op null of undefined veroorzaakt TypeError. String() kan beide verwerken.

Boolean() geeft false terug voor false, 0, -0, 0n, "", null, undefined en NaN; dit zijn falsy-waarden. Browsers hebben ook het oude falsy-object document.all. Andere waarden zijn truthy. Met name "0", "false" en een string met één spatie zijn allemaal truthy. !!value geeft dezelfde booleaanse conversie.

Voor twee antwoorden op een prompt, "12" en "30", levert a + b de waarde "1230" op. Converteer eerst beide invoerwaarden: Number(a) + Number(b) geeft 42.

Belangrijkste punten

  • Number() verwacht dat de hele string numeriek is; met parsefuncties kun je een getal aan het begin uitlezen.
  • Controleer op Annuleren en lege invoer vóór conversie naar een getal, zodat die geen nul worden.
  • Gebruik Number.isNaN() om een ongeldig getalsresultaat te herkennen.
  • Niet-lege strings zoals "false" zijn truthy.
  • String() kan null en undefined veilig converteren.

4.2 Voorspel impliciete typeconversie per bewerking

Impliciete typeconversie is automatische typeconversie binnen een bewerking. De regels hangen af van de operator. Een berekening die lijkt te werken, kan toch een tekstwaarde bevatten waardoor een latere stap mislukt.

Volg de optelregel

Voor gewone operanden van de typen number, string, boolean, null en undefined voegt + tekst samen als een van beide operanden een string is. Anders voert de operator een conversie naar getallen en een optelling uit. "5" + 2 geeft "52" en 2 + "5" geeft "25".

Evalueer een keten van links naar rechts:

console.log(1 + 2 + "3"); // 33
console.log("3" + 1 + 2); // 312

In de eerste expressie worden twee getallen opgeteld tot 3; als je daarna "3" optelt, worden de twee tekstvormen samengevoegd tot "33". In de tweede levert de eerste bewerking al "31" op, zodat de laatste bewerking nog een cijfer toevoegt. Haakjes kunnen veranderen welke bewerking eerst gebeurt: "3" + (1 + 2) geeft "33".

Andere rekenkundige bewerkingen verwachten getallen

Aftrekken, vermenigvuldigen, delen, de rest bepalen en machtsverheffen converteren numerieke strings naar getallen. "5" - 2 geeft 3, "5" * "2" geeft 10 en "10" / "4" geeft 2.5. Een string zoals "abc" kan geen geldig getal worden, dus "abc" * 2 geeft NaN. Bigints hebben aparte rekenregels; een bigint combineren met een number veroorzaakt TypeError.

Dit verschil kan een fout verbergen:

const price = "20";
console.log(price * 3); // 60
console.log(price + 5); // 205

De vermenigvuldiging converteert de prijs, maar verandert de variabele niet. De latere optelling ziet nog steeds een string. Converteer één keer waar invoer binnenkomt en werk daarna verder met het numerieke resultaat.

Volg kleine automatische conversies

In getalsberekeningen wordt true gelijk aan 1, false aan 0 en null aan 0. Dus geeft true + true de waarde 2, terwijl null + 1 de waarde 1 geeft. undefined wordt NaN, dus undefined + 1 is NaN. De unaire plus en min converteren numerieke strings: +"42" geeft 42, -"5" geeft -5 en +"" geeft 0.

++ vraagt altijd om een numerieke bijwerking, maar += volgt de optelregel:

let count = "5";
count++;
console.log(count, typeof count); // 6 number
let label = "5";
label += 1;
console.log(label, typeof label); // 51 string
Voorwaarden passen een andere conversie toe

Een if-voorwaarde beoordeelt een waarde als truthy of falsy. "0" is een niet-lege string en voldoet; het getal 0 is falsy en slaat het blok over. Als nul een geldige hoeveelheid is, kun je met alleen een controle op truthy of falsy geen onderscheid maken tussen nul en een ontbrekend antwoord. Voor een waarde die door een getal of null wordt weergegeven, controleert quantity !== null expliciet of de waarde ontbreekt.

Ook bij gelijkheid zijn er twee soorten gedrag: "7" == 7 is true na impliciete typeconversie, maar "7" === 7 is false omdat strikte gelijkheid het onderscheid tussen de typen behoudt. Gebruik strikte gelijkheid voor gewone vergelijkingen.

Als een resultaat samengevoegde tekst of NaN is, toon dan elke invoerwaarde naast typeof input. Zoek het eerste onjuiste type en verbeter de conversie op die plaats. Als je "205" aan het einde in een getal zou omzetten, krijg je 205, niet de bedoelde som 25.

Belangrijkste punten

  • Bij gewone primitieve waarden zorgt een string als operand ervoor dat + samenvoegt.
  • Volg ketens met + van links naar rechts en houd rekening met haakjes.
  • Andere rekenkundige bewerkingen converteren numerieke strings zonder de oorspronkelijke variabelen te wijzigen.
  • ++ converteert naar een getal, terwijl += tekst kan toevoegen.
  • Truthy zijn is iets anders dan geldig zijn: nul kan geldige invoer zijn.
5

Vergelijk waarden en kies een uitvoeringspad

Beslissingen zetten waarden om in acties: een vergelijking kan bepalen of een meting binnen een bereik valt, een bericht ontbreekt of een vaste keuze overeenkomt. Combineer tests zorgvuldig en gebruik ze vervolgens om een waarde of een codeblok te kiezen. De volgorde van takken en de typen die worden vergeleken, beïnvloeden het resultaat. Volg elke voorwaarde met concrete invoer, waaronder nul, een lege string en een waarde precies op een grens.

5.1 Vergelijk waarden zonder verborgen aannames

Een vergelijking levert een booleaanse waarde op. 7 > 3 is true, 5 >= 5 omvat gelijkheid en is true, en 4 < 2 is false. Sla een resultaat op zoals const isAdult = age >= 18;, of gebruik het rechtstreeks in een voorwaarde.

Geef de voorkeur aan strikte gelijkheid

=== vergelijkt zonder typen te converteren. Twee gewone primitieve waarden moeten hetzelfde type en dezelfde waarde hebben: 7 === 7 is true, terwijl "7" === 7 gelijk is aan false. !== keert strikte gelijkheid om, dus "7" !== 7 is true.

Niet-strikte gelijkheid, ==, kan operanden converteren. "7" == 7, 0 == "" en "0" == false zijn allemaal true. Door de speciale regel voor ontbrekende waarden is null == undefined waar, maar null == 0 onwaar. != keert niet-strikte gelijkheid om. Gebruik bij voorkeur === en !==; met een bewuste keuze voor value == null kun je op zowel null als undefined testen.

Onderscheid tekstvolgorde van getalsvolgorde

Twee strings worden van links naar rechts vergeleken op basis van hun UTF-16-codewaarden. Voor gewone Engelse woorden in dezelfde lettergrootte is "apple" < "banana" gelijk aan true. Een korter overeenkomend begindeel komt eerst: "apple" < "apples" is true. Bij Engelse letters zonder accenten komen hoofdletters vóór kleine letters, dus "Zebra" < "apple" is true. Door beide strings met toLowerCase() te converteren, verwijder je dat verschil in lettergrootte bij eenvoudige vergelijkingen van Engelse letters.

Ook strings met cijfers volgen de tekstvolgorde:

console.log("10" < "9"); // true
console.log("10" < 9);   // false

In de eerste vergelijking komt het teken “1” vóór “9”. In de tweede is één operand numeriek, dus wordt de tekst het getal 10. Converteer numerieke invoer bewust voordat je de grootte vergelijkt. "abc" < 5 en "abc" > 5 geven allebei false omdat de numerieke conversie NaN oplevert.

Behandel ontbrekende en ongeldige getallen eerst

NaN is niet aan zichzelf gelijk: zowel NaN === NaN als NaN == NaN is false. Gebruik Number.isNaN() om dit te herkennen.

Relationele vergelijkingen converteren null naar nul, dus null >= 0 is true, maar null > 0 is false. Gelijkheid heeft een andere regel, dus null == 0 blijft false. undefined wordt bij relationele vergelijkingen NaN, dus undefined > 0 en undefined < 0 zijn onwaar; undefined == 0 is ook onwaar. Controleer op een ontbrekende waarde voordat je die als een meting behandelt.

Vergelijk decimale getallen en bereiken

Door binaire afronding is 0.1 + 0.2 === 0.3 onwaar. Voor deze kleine waarden werkt een tolerantietest:

const closeEnough = Math.abs((0.1 + 0.2) - 0.3) < 0.000001;
console.log(closeEnough); // true

Math.abs() verwijdert het teken van het verschil. Kies een tolerantie die past bij de grootte en nauwkeurigheid van de waarden, of reken in hele eenheden zoals millimeters.

Schakel bereiktests niet aaneen zoals in de wiskunde. Bij x = 50 levert 0 < x < 10 eerst true op en vergelijkt daarna die booleaanse waarde als 1 < 10, wat true oplevert. Evenzo wordt 3 > 2 > 1 gelijk aan true > 1, oftewel 1 > 1, wat onwaar is. Schrijf beide vergelijkingen volledig uit: x > 0 && x < 10.

Belangrijkste punten

  • Strikte gelijkheid controleert typen zonder impliciete typeconversie.
  • Twee strings met cijfers worden als tekst vergeleken; converteer ze om de getalsgrootte te vergelijken.
  • Controleer op ontbrekende waarden en NaN vóór getalsvergelijkingen.
  • Bij decimale resultaten kan een tolerantie nodig zijn in plaats van exacte gelijkheid.
  • Verbind twee bereikvergelijkingen met &&; schakel ze niet aaneen.

5.2 Combineer tests en kies standaardwaarden

Met logische operatoren kan een voorwaarde meerdere eisen uitdrukken. Bij booleaanse operanden betekent && EN, || OF en ! NIET. Dankzij de evaluatievolgorde kun je ook een bewerking vooraf controleren die bij een ontbrekende waarde zou mislukken.

Druk elke eis uit
const temperatureC = 25;
const inRange = temperatureC >= 18 && temperatureC <= 30;
const outside = temperatureC < 18 || temperatureC > 30;

inRange is waar omdat aan beide grenzen is voldaan. outside is onwaar omdat geen van beide tests op buiten het bereik waar is. OF omvat ook het geval waarin beide kanten waar zijn; het betekent niet “één maar nooit allebei”.

Schrijf elke vergelijking volledig uit. color === "red" || "green" test niet op elk van beide kleuren. Bij color = "blue" is de eerste vergelijking onwaar, maar de niet-lege string "green" is truthy. De bedoelde test is color === "red" || color === "green".

Groepeer de bedoelde voorwaarde

NIET bindt vóór EN en EN vóór OF. Dus is true || false && false waar, maar (true || false) && false onwaar.

Stel dat toegang een login en de rol van beheerder of eigenaar vereist. Schrijf loggedIn && (isAdmin || isOwner). Zonder haakjes kan loggedIn && isAdmin || isOwner de hele expressie via isOwner waar maken, zelfs bij loggedIn = false. De haakjes zorgen dat de inlogeis voor beide rollen geldt.

Als je een samengestelde voorwaarde omkeert, verandert ook het verbindingsteken. !(a && b) heeft dezelfde waarheidswaarde als !a || !b; !(a || b) komt overeen met !a && !b. Voor een temperatuur buiten het interval inclusief grenzen verandert het omkeren van de twee tests binnen het interval >= in <, <= in > en EN in OF.

Stop zodra het resultaat bekend is

EN stopt bij de eerste falsy-operand; OF stopt bij de eerste truthy-operand. Dit is kortsluitevaluatie. De overgeslagen operand wordt niet geëvalueerd:

const input = null;
const hasText = input !== null && input.trim() !== "";
console.log(hasText); // false

De eerste test is onwaar, dus wordt trim() nooit op null aangeroepen. Als je die twee tests omkeert, wordt de onveilige bewerking eerst geprobeerd.

Deze operatoren geven een operand terug, niet noodzakelijk een booleaanse waarde. "" || "Guest" geeft "Guest" terug; "Sam" || "Guest" geeft "Sam" terug. "Ana" && "ok" geeft "ok" terug en null && "x" geeft null terug. Een omringende if test vervolgens of de teruggegeven waarde truthy of falsy is.

Behoud betekenisvolle falsy-waarden
ExpressieWanneer de terugvaloptie de invoer vervangt
`value
value ?? fallbackAlleen bij null of undefined

Bij quantity = 0 geeft quantity || 1 de waarde 1, maar behoudt quantity ?? 1 de waarde 0. Bij nickname = "" geeft nickname || "Anonymous" de terugvaloptie, terwijl nickname ?? "Anonymous" de lege string behoudt. Gebruik ?? als die waarden betekenis hebben.

Gebruik haakjes als je ?? met EN of OF combineert: a || b ?? c is een syntaxisfout, terwijl (a || b) ?? c een expliciete groepering heeft. NIET converteert eerst naar een booleaanse waarde en keert die daarna om: !0 is waar en !"0" is onwaar. Dubbele NIET, !!value, geeft een gewone booleaanse waarde.

Belangrijkste punten

  • EN vereist beide tests; OF vereist er ten minste één.
  • Haakjes zorgen dat gedeelde eisen voor elk toegestaan geval gelden.
  • Kortsluitevaluatie slaat een operand over zodra het resultaat vaststaat.
  • && en || geven operandwaarden terug die niet-booleaans kunnen zijn.
  • ?? vervangt alleen null en undefined en behoudt nul en lege tekst.
  • Als je ?? rechtstreeks met EN of OF combineert, zijn haakjes nodig.

5.3 Kies takken, waarden en vaste gevallen

Een if-instructie voert een blok uit wanneer de voorwaarde truthy is. Een else wordt uitgevoerd wanneer die voorwaarde falsy is. Gebruik accolades om precies aan te geven welke instructies bij elke tak horen.

Orden een keten van beslissingen

Een else if-keten controleert van boven naar beneden. De eerste voorwaarde waaraan is voldaan, wint en alle latere takken worden overgeslagen:

const score = 85;
let grade;
if (score >= 90) {
  grade = "A";
} else if (score >= 80) {
  grade = "B";
} else if (score >= 70) {
  grade = "C";
} else {
  grade = "F";
}

De eerste vergelijking slaagt niet; de tweede wel, dus wordt grade gelijk aan "B". Als je score >= 70 eerst test, zou zelfs een score van 95 daaronder vallen en "C" krijgen. Zet bij overlappende ondergrenzen de hoogste eerst. De gedeelde variabele grade is buiten de takken gedeclareerd, zodat latere code die kan lezen.

Een samengestelde voorwaarde kan een korte beslissing leesbaar houden. Verzending is gratis bij een bestelbedrag van ten minste 50 of voor een lid; anders kost verzending 4,95:

const orderTotal = 45;
const isMember = false;
let shipping;
if (orderTotal >= 50 || isMember) {
  shipping = 0;
} else {
  shipping = 4.95;
}
console.log(`To pay: ${orderTotal + shipping}`);
// To pay: 49.95

Twee geneste voorwaarden zonder else-takken kun je vaak met EN verbinden: if (isLoggedIn) { if (isAdmin) { ... } } voert de binnenste code onder dezelfde booleaanse voorwaarden uit als if (isLoggedIn && isAdmin) { ... }.

Vermijd leestekens die het uitvoeringspad veranderen

Zonder accolades hoort alleen de volgende instructie bij een if; inspringing kan daar geen andere instructie aan toevoegen. Een puntkomma direct na de voorwaarde maakt een lege instructie: if (x > 5); { ... } zorgt dat het volgende blok ongeacht de voorwaarde wordt uitgevoerd.

if (x = 5) wijst 5 toe en test vervolgens of de waarde truthy is. Dit verandert x en voldoet aan de voorwaarde omdat 5 truthy is. Gebruik if (x === 5) om te vergelijken.

Kies een waarde met een voorwaardelijke expressie

De voorwaardelijke, of ternaire, operator geeft een van twee waarden terug:

const age = 17;
const status = age >= 18 ? "adult" : "minor";
console.log(status); // minor

De vorm is condition ? valueIfTrue : valueIfFalse. Gebruik die voor een korte keuze binnen een toewijzing of templateliteral. Gebruik if/else voor takken met instructies. Diep geneste voorwaardelijke expressies maken de keuzes moeilijk te volgen.

Koppel vaste keuzes met switch
const day = "Sat";
let kind;
switch (day) {
  case "Sat":
  case "Sun":
    kind = "weekend";
    break;
  default:
    kind = "weekday";
}

switch vergelijkt de waarde strikt met de caselabels. Beide weekendlabels bereiken dezelfde toewijzing. break verlaat de switch-instructie; default handelt een waarde zonder overeenkomend geval af. switch ("2") komt niet overeen met case 2: omdat de typen verschillen.

Na een overeenkomst loopt de uitvoering door volgende cases heen tot een break of het einde. Dit doorvallen naar de volgende case kan bewust gebeuren, zoals bij labels onder elkaar, of onbedoeld. Als case 2 een woord toevoegt en geen break heeft voordat case 3 een ander woord toevoegt, worden beide toevoegingen uitgevoerd. Een caselabel is een beginpunt, geen nieuwe voorwaarde die na elke instructie wordt getest.

Belangrijkste punten

  • Een else if-keten voert alleen de eerste tak uit waarvan de voorwaarde waar is.
  • Declareer een resultaat buiten de takken als latere instructies het nodig hebben.
  • Gebruik accolades en zet geen puntkomma direct na een if-voorwaarde.
  • = wijst een waarde toe; === vergelijkt waarden.
  • De voorwaardelijke operator kiest een waarde.
  • switch vergelijkt strikt en heeft break nodig om doorvallen te stoppen.
6

Vind de eerste verkeerde stap

Een foutmelding kan rechtstreeks naar een vergissing wijzen, maar een programma kan ook zonder foutmelding worden uitgevoerd en een verkeerd resultaat opleveren. Lees het type, de melding en de locatie in de console en volg daarna de waarden die ertoe doen. Als logmeldingen te veel te raden overlaten, onderbreek dan de uitvoering en doorloop die stap voor stap. Een kleine, herhaalbare werkwijze voor foutopsporing helpt je één oorzaak tegelijk te testen en de verbetering in het opgeslagen programma te controleren.

6.1 Lees fouten en volg onjuiste resultaten

Een programma kan mislukken voordat het start, tijdens de uitvoering stoppen of eindigen met een verkeerd resultaat. Stel vast wat er is gebeurd voordat je code wijzigt. De console geeft aanwijzingen over fouten, terwijl logmeldingen met labels waarden tonen in code die wordt uitgevoerd.

Onderscheid drie soorten problemen
SoortWat gebeurt erVoorbeeld
SyntaxisfoutHet script kan niet worden ontleed; niets van dat script wordt uitgevoerdEen niet-gesloten haakje
UitvoeringsfoutDe uitvoering bereikt een instructie die een uitzondering opwerpt; eerdere instructies zijn uitgevoerdEen onbekende naam lezen
Logische foutDe code wordt uitgevoerd, maar het resultaat is verkeerdAlleen het laatste deel van een som delen

Een syntaxisfout in één script maakt een ander script dat al is uitgevoerd niet ongedaan. Een niet-afgehandelde uitzondering tijdens de uitvoering stopt de huidige uitvoering bij de instructie die de fout veroorzaakt.

Lees de volledige melding

Een consolemelding zoals Uncaught ReferenceError: totl is not defined geeft het fouttype en de naam die de fout veroorzaakt. “Uncaught” betekent dat de uitzondering niet is afgehandeld. Een locatie zoals app.js:2 verwijst naar het bestand en de regel; als je erop klikt, wordt die code geopend.

let total = 0;
total = totl + 5;
console.log(total);

Regel 1 wordt uitgevoerd. Op regel 2 kan JavaScript totl niet lezen, dus wordt die toewijzing niet voltooid en wordt de laatste logmelding niet bereikt. Als je de spelfout verbetert naar total, toont het script 5.

Veelvoorkomende syntaxisfouten melden een ontbrekend ), een onverwacht teken of een ongeldig teken. In console.log("hi"; ontbreekt het sluitende haakje. In if (x > 3 { mist de voorwaarde het sluitende haakje. De gemelde regel is waar de engine het probleem opmerkte; kijk ook vlak daarboven naar een niet-gesloten aanhalingsteken of scheidingsteken.

Beperk de mogelijke oorzaken met het type

Een ReferenceError wijst op een naam die niet kan worden gebruikt: een typefout, een probleem met het bereik of lezen vóór initialisatie. Een TypeError betekent dat de bewerking niet bij de waarde past, zoals "abc".length(), null.trim() of hertoewijzing aan een const. Een RangeError kan ontstaan door een niet-ondersteund argument, zoals (1.5).toFixed(101).

De formulering van een fout kan per browser verschillen. Het type en de betrokken waarde zijn nuttiger dan de hele zin uit je hoofd leren. Verhelp de eerste relevante fout en voer de code opnieuw uit, omdat latere meldingen uit dezelfde oorzaak kunnen voortkomen.

Volg een logische fout

Toon bij een verkeerd gemiddelde de som en het resultaat afzonderlijk:

const sum = 72 + 85 + 90;
const average = 72 + 85 + 90 / 3;
console.log("sum:", sum);         // 247
console.log("average:", average); // 187

De correcte som beperkt de fout tot de deling. Verander de berekening in sum / 3, wat 82.33333333333333 geeft. Als optellen onverwacht cijfers samenvoegt, toon dan ook de typen: console.log("price:", price, typeof price);. Zoek de eerste waarde die afwijkt van wat je verwacht.

Gebruik console.warn() of console.error() om je eigen diagnosemeldingen te laten opvallen. Controleer de niveaufilters van de console als een logmelding lijkt te ontbreken. Een 404 betekent dat een resource niet is gevonden, dus controleer het scriptpad; bij andere laadfouten heb je de volledige melding nodig. Een ontbrekende opstartmelding kan ook op een filter of een syntaxisfout wijzen.

Reproduceer het probleem, lees de eerste fout, test één waarschijnlijke oorzaak met een kleine wijziging of logmelding, voer de code opnieuw uit en controleer het verwachte resultaat. Verwijder tijdelijke logmeldingen wanneer de fout is verholpen.

Belangrijkste punten

  • Voor syntaxisfouten, uitvoeringsfouten en logische fouten zijn verschillende soorten aanwijzingen nodig.
  • Lees het fouttype, de volledige melding en de locatie.
  • De gemelde regel van een syntaxisfout kan na het werkelijk ontbrekende scheidingsteken liggen.
  • Toon waarden en typen om de eerste onjuiste stap te vinden.
  • Controleer laadfouten en consolefilters als verwachte uitvoer ontbreekt.

6.2 Onderbreek de uitvoering en inspecteer actuele waarden

Met een debugger kun je een actief script onderbreken en de waarden op dat precieze moment inspecteren. Gebruik het paneel Sources in Chrome of Edge, of het paneel Debugger in Firefox. Dit is vooral handig wanneer een verkeerd resultaat afhangt van meerdere eerdere bewerkingen.

Onderbreek voordat de regel wordt uitgevoerd

Open het script in Sources en klik op een regelnummer om een onderbrekingspunt in te stellen. De uitvoering wordt onderbroken voordat die regel wordt uitgevoerd. Als de code tijdens het laden van de pagina wordt uitgevoerd, laad de pagina dan opnieuw nadat je het onderbrekingspunt hebt ingesteld. Alleen een punt instellen voert code die al klaar is niet opnieuw uit.

Je kunt ook debugger; in het script schrijven. Als een debugger actief is, onderbreekt dit de uitvoering; zonder actieve debugger heeft het geen effect. Verwijder deze instructie voordat je de code publiceert.

Kies de volgende actie
Bediening in ChromeSneltoetsEffect
HervattenF8Ga verder tot het volgende onderbrekingspunt of het einde
Stap uitvoeren zonder een functie binnen te gaanF10Voer de huidige instructie uit zonder een aangeroepen functie binnen te gaan
Functie binnengaanF11Ga een aangeroepen functie binnen als die beschikbaar is voor de debugger
Functie verlatenShift+F11Voltooi de huidige functie en onderbreek weer in de aanroepende code

Sommige ingebouwde aanroepen hebben geen JavaScript-broncode die je stap voor stap kunt binnengaan. Een stap uitvoeren zonder de functie binnen te gaan is handig als je het resultaat van de aanroep wilt zonder de interne werking te volgen.

Houd tijdens een onderbreking de aanwijzer boven een naam om die te inspecteren, lees lokale waarden in Scope of voeg een expressie toe aan Watch. Expressies in Watch zoals typeof price en total > 100 worden bij elke stap opnieuw geëvalueerd. De console kan ook expressies evalueren met het bereik tijdens de onderbreking.

Inspecteer een misleidend totaal

Gratis verzending moet beginnen bij 50, maar deze code kent die toe bij een subtotaal van 45 plus 4 verzendkosten:

const subtotal = "45";
const shipping = 4;
const total = subtotal + shipping;
if (total >= 50) {
  console.log("Free shipping");
}

Stel een onderbrekingspunt in op de regel met if en laad opnieuw. De toewijzing is al uitgevoerd. Scope toont subtotal als de string "45" en total als "454". Een expressie typeof total in Watch meldt "string". De vergelijking converteert "454" naar een getal, zodat aan total >= 50 wordt voldaan.

De fout zit in de optelling, vóór de vergelijking. Verander de opgeslagen berekening in const total = Number(subtotal) + shipping;. Laad opnieuw. Het totaal is nu het getal 49 en de voorwaarde is onwaar. Als je in plaats daarvan op de toewijzing onderbreekt, is die nog niet uitgevoerd: voer eerst die stap uit voordat je de geïnitialiseerde total inspecteert.

Onderbreek alleen waar dat nuttig is

Een voorwaardelijk onderbrekingspunt onderbreekt alleen wanneer de expressie waar is, zoals total > 100. Klik met de rechtermuisknop op het regelnummer om er een toe te voegen. Een logpunt toont telkens wanneer de regel wordt uitgevoerd een melding, zonder te onderbreken of het script te wijzigen. Onderbrekingspunten voor uitzonderingen onderbreken waar een uitzondering wordt opgeworpen, zodat je de waarden bij de fout kunt inspecteren.

Als je een else if-keten stap voor stap doorloopt, zie je welke tak wordt bereikt en welke eerdere voorwaarde latere controles voorkomt. Gebruik logmeldingen voor een paar bekende waarden en de debugger wanneer de volgorde of meerdere actuele waarden ertoe doen. Breng de definitieve verbetering aan in de opgeslagen projectcode: een experimentele wijziging in de browser is geen blijvende wijziging in je project. Voer het oorspronkelijke geval dat misging opnieuw uit en controleer het verbeterde resultaat.

Belangrijkste punten

  • Een onderbrekingspunt op een regel onderbreekt voordat de instructie wordt uitgevoerd; laad code die bij het laden van de pagina draait opnieuw.
  • Een stap uitvoeren zonder een functie binnen te gaan voert een instructie uit; met functie binnengaan en functie verlaten volg je functieaanroepen.
  • Scope en Watch tonen actuele waarden en expressies tijdens een onderbreking.
  • Inspecteer een verkeerd type vóór de bewerking die het gebruikt.
  • Een voorwaardelijk onderbrekingspunt filtert onderbrekingen; een logpunt toont uitvoer zonder te onderbreken.
  • Sla de verbetering op in het project en voer het geval dat misging opnieuw uit.

Variabelen en gegevenstypen in JavaScript: voorbeelden

6 Walkthroughs

1

Laad een script en lees de eerste meldingen

13 stappen
Koppel een klein script aan HTML, kies het laadgedrag en interpreteer resultaten van de console en dialoogvensters.
  1. 1
    IntroductieGeef de code een plek om te draaien

    Een browser leest HTML om de pagina op te bouwen en voert JavaScript uit om instructies uit te voeren. Om een eerste resultaat te zien, heb je een gekoppeld script en een open console nodig. We volgen een kleine pagina vanaf de bestandsindeling tot de getoonde melding en gebruiken daarna console-invoer om opgeslagen waarden te onderscheiden van de resultaten van instructies.

  2. 2
    UitlegKies inlinecode of externe code

    Een inlinescript bevat code tussen de tags. Een extern script gebruikt src om een apart JavaScript-bestand te laden:

    <script src="js/greet.js"></script>
    

    Het externe bestand bevat JavaScript zonder HTML-tags. Code binnen hetzelfde element zou worden genegeerd omdat src aanwezig is. Behoud de sluitingstag </script>; HTML behandelt dit element niet als zelfsluitend.

  3. 3
    VoorbeeldStem het pad af op de mappen

    Plaats index.html naast een map met de naam js, met greet.js in die map. Het pad src="js/greet.js" van de pagina begint in de HTML-map en gaat naar js.

    Schrijf in het JavaScript-bestand:

    console.log("Page ready");
    

    Sla beide bestanden op. Een pad greet.js zou naast het HTML-bestand zoeken in plaats van in de onderliggende map en dit script dus niet vinden.

  4. 4
    UitlegVoer uit nadat de pagina is ontleed

    Voeg defer toe aan het externe klassieke script in de head:

    <script src="js/greet.js" defer></script>
    

    Het downloaden gebeurt tijdens het ontleden van de HTML. De uitvoering wacht tot het ontleden is voltooid. Meerdere uitgestelde klassieke scripts behouden hun HTML-volgorde, wat van belang is als het ene een waarde gebruikt die door het andere is ingesteld. Als je defer aan klassieke inlinecode toevoegt, wordt die niet uitgesteld.

  5. 5
    UitdagingHoud afhankelijke scripts op volgorde

    Een pagina heeft setup.js gevolgd door display.js in de head. Het tweede script gebruikt een waarde uit het eerste en beide hebben ontlede pagina-inhoud nodig. Zou async op beide aan deze eisen blijven voldoen? Welke laadkeuze zou dat wel doen?

    ---reveal---

    Nee. Async-scripts worden uitgevoerd zodra hun download is voltooid, dus hun volgorde en een volledig ontlede pagina zijn niet gegarandeerd. Gebruik defer op beide externe klassieke scripts en houd setup eerst in de HTML.

  6. 6
    VerbandHerken een modulescript

    Een script dat met type="module" wordt geladen, wordt standaard uitgesteld uitgevoerd, gebruikt strikte modus en houdt zijn namen op het hoogste niveau binnen de module. Modules kunnen code delen via import en export. Laad modulepagina's in Chrome of Firefox via een lokale ontwikkelserver; als je rechtstreeks een bestandsadres opent, loop je tegen beperkingen voor het laden van modules aan. Dit zijn andere laadregels dan voor een gewoon klassiek script.

  7. 7
    TipOpen de console voor deze pagina

    Open in Chrome of Edge de console met Ctrl+Shift+J op Windows/Linux of Cmd+Option+J op Mac. Firefox gebruikt Ctrl+Shift+K of Cmd+Option+K. Laad de opgeslagen pagina opnieuw en zoek naar “Page ready”. Een foutmelding over een ontbrekend bestand verwijst je terug naar het pad; een syntaxisfout wijst naar code die de engine niet kon ontleden. Console-invoer hoort bij de huidige pagina.

  8. 8
    VoorbeeldOnderscheid tonen van evalueren

    Voer deze regels afzonderlijk in de console in:

    let total = 9;
    total;
    console.log("Total:", total);
    

    De declaratie kan undefined als resultaat tonen. Het lezen van total geeft nog steeds 9. De laatste aanroep toont “Total: 9” en geeft zelf undefined terug. Het getoonde resultaat van een instructie is niet noodzakelijk de waarde die in de variabele is opgeslagen of de melding die de aanroep toont.

  9. 9
    UitdagingLees een declaratie in de console

    Je voert let count = 6; in en ziet undefined. Daarna voer je count + 2 in. Welk resultaat verwacht je en betekende de eerste weergave dat de declaratie was mislukt?

    ---reveal---

    Het resultaat is 8. De declaratie heeft 6 opgeslagen; het eigen resultaat was undefined. De latere expressie leest dat opgeslagen getal en telt er 2 bij op. Er vindt geen hertoewijzing plaats, dus count zelf bevat nog steeds 6.

  10. 10
    UitlegGebruik exacte namen en duidelijke opmerkingen

    JavaScript maakt onderscheid tussen hoofdletters en kleine letters. console.log() werkt; Console.log() zoekt naar een andere naam. Gebruik // voor commentaar op één regel of /* ... */ voor langer commentaar. De engine slaat commentaartekst over.

    Begin een klassiek script met "use strict"; om niet-gedeclareerde toewijzingen te signaleren. Een typefout zoals totl = 5; meldt dan een fout in plaats van onbedoeld een globale naam te maken.

  11. 11
    VoorbeeldInspecteer het type van invoer uit een dialoogvenster

    Voer deze oefencode met een dialoogvenster uit:

    const input = prompt("Quantity?", "1");
    console.log(input, typeof input);
    

    Als je een getypte 6 bevestigt, krijg je 6 string: de cijfers zijn als tekst teruggekomen. Annuleren geeft null terug, terwijl een leeg vak bevestigen een lege string teruggeeft. confirm() geeft daarentegen een booleaanse waarde terug en alert() toont een melding. Een dialoogvenster wacht op het antwoord voordat de volgende instructie wordt uitgevoerd.

  12. 12
    UitdagingVerbind laden met uitvoer

    Een extern klassiek script dat met defer is geladen, bevat console.log("Started"); const answer = prompt("Code?"); console.log(typeof answer);. De gebruiker typt 42 en bevestigt. Wat verschijnt er, in welke volgorde, en blijft dat ingevoerde antwoord bij opnieuw laden automatisch behouden?

    ---reveal---

    De meldingen zijn “Started” en “string”. Prompt geeft tekst terug, ook bij cijfers. Bij opnieuw laden wordt het opgeslagen script opnieuw uitgevoerd en gaat de prompt opnieuw open; de variabele uit de vorige uitvoering is geen opgeslagen projectwijziging.

  13. 13
    SamenvattingControleer een eerste script

    Controleer voor een eerste script het relatieve pad, kies het laadgedrag, sla op en laad opnieuw. Lees de consolemelding afzonderlijk van het eigen evaluatieresultaat van de console. Als een prompt invoer levert, inspecteer dan de waarde en het type voordat je er een berekening omheen bouwt. Een nieuw experiment in de console verandert de actieve pagina, dus bewaar blijvende wijzigingen in het project.

2

Volg declaraties, bijwerkingen en bereik

11 stappen
Volg een tussentotaal en voorspel daarna hoe binnenste blokken en declaratiefouten de uitvoering beïnvloeden.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVolg één waarde door een programma
  2. 2
    UitlegKies declaraties op basis van hertoewijzing
  3. 3
    VoorbeeldLees de oude waarde voordat je de nieuwe opslaat
  4. 4
    VoorbeeldBereken een eindwaarde één keer
  5. 5
    UitdagingKies de passende declaratie
  6. 6
    UitlegPlaats een gedeeld resultaat buiten de takken
  7. 7
    UitdagingHerken overschaduwing
  8. 8
    KernpuntEen binding kan bestaan voordat die klaar is
  9. 9
    TipLees het fouttype als aanwijzing
  10. 10
    UitdagingHerstel het resultaat zonder het te verbergen
  11. 11
    SamenvattingLees eerst de binding en daarna de waarde
3

Bereken een totaal en bouw het bericht op

18 stappen
Inspecteer typen, bereken en formatteer resultaten, transformeer strings en stel een bericht met een template samen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBehoud de betekenis van waarden tot tekst
  2. 2
    UitlegInspecteer een waarde voordat je die gebruikt
  3. 3
    UitdagingVoorspel een veranderend type
  4. 4
    KernpuntTrek niet te veel conclusies uit een typelabel
  5. 5
    VoorbeeldBereken voordat je opmaakt
  6. 6
    UitlegMaak de hele som de teller
  7. 7
    UitdagingBepaal het aantal hele meters
  8. 8
    TipKies de afronding op basis van de richting
  9. 9
    VerbandHoud nauwkeurigheid apart van weergave
  10. 10
    UitlegBewaar het resultaat van een transformatie
  11. 11
    VoorbeeldLees indexen en een slice
  12. 12
    UitdagingSchoon eerst op en controleer daarna
  13. 13
    KernpuntWeet of een methode tekst teruggeeft
  14. 14
    VoorbeeldVoeg het berekende totaal in
  15. 15
    UitdagingKies de benodigde aanhalingstekens
  16. 16
    UitlegLaat de expressie een woord kiezen
  17. 17
    UitdagingCombineer opschonen en numerieke weergave
  18. 18
    SamenvattingInspecteer een bericht van binnen naar buiten
4

Accepteer een hoeveelheid zonder ontbrekende invoer te verbergen

12 stappen
Volg een antwoord uit een prompt door controles op afwezigheid, conversie, validatie en berekening.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieOnderscheid afwezigheid van een getalswaarde
  2. 2
    VoorbeeldInspecteer het ruwe antwoord
  3. 3
    UitlegControleer op afwezigheid vóór conversie
  4. 4
    VoorbeeldWijs een mislukte conversie af
  5. 5
    UitdagingKies een parsefunctie die bij de betekenis past
  6. 6
    KernpuntConverteer op truthy of falsy zonder het woord te lezen
  7. 7
    VoorbeeldHerken een berekening die tekst verbergt
  8. 8
    UitlegEvalueer een keten vanaf links
  9. 9
    UitdagingVolg twee verschillende bijwerkingen
  10. 10
    TipHerstel de invoer vóór het totaal
  11. 11
    UitdagingBehoud nul door het hele traject
  12. 12
    SamenvattingValideer in de volgorde waarin informatie beschikbaar komt
5

Bouw een beslissing die aan de regels voldoet

15 stappen
Vergelijk waarden, combineer eisen, behoud nul bij standaardwaarden en volg takken en switch-cases.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieZet een regel om in een voorspelbare beslissing
  2. 2
    UitlegHoud typen zichtbaar bij gelijkheid
  3. 3
    VoorbeeldVergelijk getallen die als tekst zijn opgeslagen
  4. 4
    UitdagingBepaal de werkelijke operanden van een vergelijking
  5. 5
    TipControleer op afwezigheid en numerieke nauwkeurigheid
  6. 6
    UitlegMaak elke eis expliciet
  7. 7
    VoorbeeldGroepeer een gedeelde eis
  8. 8
    UitdagingBehoud een lege waarde als die geldig is
  9. 9
    KernpuntKortsluitevaluatie bepaalt wat wordt geëvalueerd
  10. 10
    VoorbeeldVolg de eerste tak waarvan de voorwaarde waar is
  11. 11
    UitdagingKies één waarde of meerdere instructies
  12. 12
    UitlegLees switch als een beginpunt
  13. 13
    UitdagingVoorspel wat er gebeurt zonder break
  14. 14
    UitdagingCombineer conversie met de volgorde van takken
  15. 15
    SamenvattingTest de regel op de grenzen
6

Zoek en herstel een misleidend totaal

12 stappen
Gebruik aanwijzingen uit de console en een onderbroken toestand in de debugger om een typefout te vinden in een berekening die verder wordt uitgevoerd.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieZoek waar het resultaat voor het eerst verkeerd wordt
  2. 2
    UitlegBepaal het soort fout voordat je code wijzigt
  3. 3
    VoorbeeldLees de naam en locatie van de fout
  4. 4
    UitdagingOnderscheid ontleden van uitvoeren
  5. 5
    TipToon de eerste onverwachte waarde
  6. 6
    VoorbeeldReproduceer de verkeerde beslissing
  7. 7
    UitlegOnderbreek vóór de vergelijking
  8. 8
    KernpuntDe latere conversie kan de optelling niet herstellen
  9. 9
    UitdagingInspecteer vóór en na een toewijzing
  10. 10
    TipKies de onderbreking die de vraag beantwoordt
  11. 11
    UitdagingControleer een typeverbetering via een beslissing
  12. 12
    SamenvattingTest de opgeslagen verbetering opnieuw

Variabelen en gegevenstypen in JavaScript: oefenvragen

60 Oefenvragen in 6 sets

Set 1: Bouw tekst op en converteer invoer10 Oefenvragen

Vraag 1 van 10

Wat geeft "notes.txt".endsWith(".txt") terug?
  1. "txt"
  2. 5
  3. true
  4. "true"
Toon antwoordVerberg antwoord
Antwoord: C
endsWith() test of een string het gevraagde einde heeft en geeft een booleaanse waarde terug. Het einde komt overeen, dus is het resultaat de waarde true zonder aanhalingstekens. Een zoekpositie zoals 5 hoort bij een ander soort methode en "true" zou tekst zijn in plaats van een booleaanse waarde.

Vraag 2 van 10

Wat wordt er getoond?

let tag = " mixed ";
tag.trim().toUpperCase();
console.log(tag.length);
  1. 7
  2. 5
  3. 6
  4. 0
Toon antwoordVerberg antwoord
Antwoord: A
Beide methoden leveren nieuwe strings op, maar deze code slaat het resultaat niet op. De oorspronkelijke waarde heeft nog steeds een spatie aan het begin, vijf letters en een spatie aan het einde, voor een lengte van 7. Voor een lengte van 5 zou je het resultaat zonder buitenste spaties opnieuw in tag moeten opslaan.

Vraag 3 van 10

Gegeven const trays = 4; const massKg = 1.25;, wat levert `Mass: ${(trays * massKg).toFixed(1)} kg` op?
  1. "Mass: 5 kg"
  2. "Mass: 41.25 kg"
  3. "Mass: 5.00 kg"
  4. "Mass: 5.0 kg"
Toon antwoordVerberg antwoord
Antwoord: D
De plaatsaanduiding vermenigvuldigt eerst de twee getallen tot 5; daarna maakt toFixed(1) dat resultaat op met één decimaal. De template voegt die tekst in en levert “Mass: 5.0 kg” op. Als je de nul weglaat, negeer je de opmaakaanroep; voor twee nullen zou toFixed(2) nodig zijn.

Vraag 4 van 10

Bij const name = "Mira";, welke tekst wordt opgeslagen door const label = "Hello, ${name}";?
  1. "Hello, Mira"
  2. "Hello, ${name}"
  3. "Hello, undefined"
  4. "Hello, name"
Toon antwoordVerberg antwoord
Antwoord: B
Dubbele aanhalingstekens maken een gewone string, dus blijven de symbolen van de plaatsaanduiding en het woord name letterlijke tekst. De variabele wordt niet gelezen of ingevuld. Om “Hello, Mira” te produceren, moet de string backticks gebruiken zodat ${name} als plaatsaanduiding in een template werkt.

Vraag 5 van 10

Welke waarde levert Number("18px") op?
  1. NaN
  2. 18
  3. 0
  4. "18"
Toon antwoordVerberg antwoord
Antwoord: A
Number() vereist dat de hele string, afgezien van witruimte, een getal voorstelt. De afsluitende letters maken deze conversie ongeldig, wat de getalswaarde NaN oplevert. Het lezen van 18 en negeren van het achtervoegsel hoort bij een functie die een getal aan het begin uitleest, zoals parseInt("18px", 10).

Vraag 6 van 10

Een prompt voor een hoeveelheid wordt geannuleerd. De code berekent direct Number(input). Welke waarde ontstaat en welke informatie is verloren gegaan?
  1. NaN; Annuleren is niet meer te onderscheiden van ongeldige tekst.
  2. null; Annuleren blijft te onderscheiden van een ingevoerde nul.
  3. "0"; Annuleren is niet meer te onderscheiden van numerieke tekst.
  4. 0; Annuleren is niet meer te onderscheiden van een ingevoerde nul.
Toon antwoordVerberg antwoord
Antwoord: D
Annuleren geeft null terug en Number(null) is nul. Door direct te converteren gaat het onderscheid tussen een ontbrekend antwoord en een geldige numerieke nul verloren. Het resultaat is geen NaN: controleer vóór conversie op null en lege invoer als afwezigheid apart moet worden afgehandeld.

Vraag 7 van 10

Welke waarde en welk type levert 6 + 2 + "4" op?
  1. 12, getal
  2. "624", string
  3. "84", string
  4. 84, getal
Toon antwoordVerberg antwoord
Antwoord: C
De optelling verloopt van links naar rechts: het eerste paar getallen geeft 8, waarna de string als operand ervoor zorgt dat de volgende optelling samenvoegt. De uiteindelijke waarde is de string "84". Als je de hele expressie als één concatenatie behandelt, krijg je "624" en zie je de eerste numerieke bewerking over het hoofd.

Vraag 8 van 10

Wat levert shown + 1 op na const shown = (7.5).toFixed(2);?
  1. 8.5
  2. "7.501"
  3. "8.50"
  4. "7.51"
Toon antwoordVerberg antwoord
Antwoord: B
toFixed(2) geeft de string "7.50" terug. Als je 1 bij die string optelt, wordt de tekstvorm eraan toegevoegd, wat "7.501" geeft. Een numeriek resultaat van 8,5 vereist dat je vóór de opmaak rekent of de opgemaakte string expliciet terug naar een getal converteert.

Vraag 9 van 10

Een invoerwaarde is een string of null. Een hoeveelheid moet aanwezig, niet-negatief en numeriek zijn; nul is toegestaan. Welke validatievolgorde voldoet aan alle eisen?
  1. Converteer met Number; wijs falsy-getallen af; accepteer de rest.
  2. Wijs null af; gebruik parseFloat; wijs NaN of waarden onder 0 af.
  3. Wijs null en leeg af; converteer met Number; wijs waarden onder 0 af.
  4. Wijs null en leeg af; converteer met Number; wijs NaN of waarden onder 0 af.
Toon antwoordVerberg antwoord
Antwoord: D
Door eerst op afwezigheid te controleren, blijven Annuleren en lege invoer als ontbrekende antwoorden herkenbaar. Number() wijst daarna tekst aan het einde af en afzonderlijke tests op NaN en negatieve waarden laten een geldige nul toe. Alleen negatieve waarden afwijzen accepteert nog steeds NaN, omdat NaN < 0 onwaar is; een test op truthy of falsy wijst juist nul af.

Vraag 10 van 10

Welke waarde en welk type worden getoond?

let amount = "6";
amount += 2;
amount++;
amount -= 4;
console.log(amount, typeof amount);
  1. 58, getal
  2. 5, getal
  3. 59, getal
  4. "59", string
Toon antwoordVerberg antwoord
Antwoord: C
De samengestelde optelling maakt eerst de string "62". Increment converteert die naar het getal 63; na de aftrekking blijft het getal 59 over. Als je de eerste bijwerking als numerieke optelling behandelt, krijg je 5; als je de increment mist, krijg je 58. Het resultaat van elke bewerking is dus van belang.
Set 2: Voer code uit en volg opgeslagen waarden10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een HTML-pagina staat naast een map scripts met daarin start.js. Welk element laadt dat bestand nadat het ontleden van de HTML is voltooid?
  1. <script src="start.js" defer></script>
  2. <script src="scripts/start.js" defer></script>
  3. <script src="scripts/start.js" async></script>
  4. <script defer>scripts/start.js</script>
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke melding toont deze code?

// console.log("Old");
console.log("Items:", 6 + 2);
  1. “Old Items: 8”
  2. “Items: 62”
  3. “Items: 6 + 2”
  4. “Items: 8”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een programma slaat const rate = 0.15; op en voert daarna rate = 0.2; uit. Wat gebeurt er bij de toewijzing?
  1. Er ontstaat een TypeError.
  2. Het tarief wordt 0,2.
  3. Er ontstaat een SyntaxError.
  4. Het tarief blijft undefined.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarde wordt getoond?

let balance = 14;
balance = balance + 9;
balance = balance - 4;
console.log(balance);
  1. 23
  2. 10
  3. 19
  4. 14
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke waarden worden achtereenvolgens getoond?

let level = 4;
{
  let level = 9;
  console.log(level);
}
console.log(level);
  1. 9, daarna 9
  2. 4, daarna 9
  3. 9, daarna 4
  4. 4, daarna 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke string geeft typeof "28" terug?
  1. "number"
  2. "string"
  3. "object"
  4. "undefined"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een gemeten lengte is 386 cm. Welk paar geeft het aantal hele meters en de resterende centimeters?
  1. Math.floor(386 / 100) en 386 % 100
  2. 386 / 100 en 386 % 100
  3. Math.round(386 / 100) en 386 % 100
  4. Math.floor(386 / 100) en 386 / 100
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat geeft "catalog".slice(1, 4) terug?
  1. "atal"
  2. "cat"
  3. "tal"
  4. "ata"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een script toont een opstartmelding en stopt daarna met ReferenceError: lenght is not defined. Wat moet je eerst inspecteren?
  1. Het HTML-pad van het geladen script.
  2. De spelling en het bereik van lenght.
  3. De decimale nauwkeurigheid van de waarden.
  4. De kleurinstellingen voor waarschuwingen in de console.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Neem aan dat er geen eerdere declaratie van cost is. Wat wordt getoond voordat dit script stopt?

let cost = 8;
{
  console.log(cost);
  let cost = 12;
}
console.log(cost);
  1. Niets; de eerste logmelding treft een tijdelijke dode zone.
  2. 8; daarna mislukt de binnenste declaratie.
  3. 12; daarna toont de buitenste logmelding 8.
  4. undefined; daarna toont de buitenste logmelding 8.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Test vergelijkingen en kies takken10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat is het resultaat van "16" === 16?
  1. true
  2. "false"
  3. NaN
  4. false
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een sensor slaat meetwaarden op als strings. Waarom evalueert "24" < "8" tot true?
  1. Beide strings worden vóór de vergelijking naar getallen geconverteerd.
  2. De eerste verschillende teksttekens zijn “2” en “8”.
  3. De vergelijking controleert de getalswaarde van de kortere string.
  4. De kleiner-dan-operator keert de getalsvolgorde voor strings om.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Tot welke waarde evalueert 0 ?? 5?
  1. 0
  2. 5
  3. false
  4. null
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een meetwaarde moet ten minste 12 en niet meer dan 28 zijn. Welke voorwaarde test dat bereik inclusief de grenzen?
  1. reading > 12 && reading < 28
  2. reading >= 12 || reading <= 28
  3. reading >= 12 && reading <= 28
  4. 12 <= reading <= 28
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat wordt er getoond?

const points = 76;
let badge;
if (points >= 60) {
  badge = "bronze";
} else if (points >= 75) {
  badge = "silver";
} else {
  badge = "none";
}
console.log(badge);
  1. “silver”
  2. “bronze”
  3. “none”
  4. “bronze silver”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat levert active ? "Ready" : "Waiting" op bij const active = false;?
  1. "Ready"
  2. false
  3. undefined
  4. "Waiting"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke waarde wordt getoond?

const mode = "2";
let label = "idle";
switch (mode) {
  case 2:
    label = "fast";
    break;
  default:
    label = "normal";
}
console.log(label);
  1. “normal”
  2. “fast”
  3. “idle”
  4. “fast normal”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Publiceren vereist goedkeuring en de rol van redacteur of eigenaar. Bij approved = false, isEditor = false en isOwner = true gebruikt de code approved && isEditor || isOwner. Welk resultaat geeft dit en welke voorwaarde dwingt de volledige regel af?
  1. false; gebruik approved && (isEditor || isOwner)
  2. true; gebruik approved || (isEditor && isOwner)
  3. true; gebruik approved && (isEditor || isOwner)
  4. false; gebruik approved || (isEditor && isOwner)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Welke tekst wordt getoond?

let route = "";
switch (3) {
  case 2:
    route += "A";
    break;
  case 3:
    route += "B";
  case 4:
    route += "C";
    break;
  default:
    route += "D";
}
console.log(route);
  1. “B”
  2. “BCD”
  3. “BC”
  4. “ABC”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat zijn bij const distance = 42; achtereenvolgens de waarden van 0 < distance < 20 en distance > 0 && distance < 20?
  1. false en false
  2. true en false
  3. true en true
  4. false en true
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Volg fouten en inspecteer de uitvoering10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een script berekent de oppervlakte van een rechthoek door de lengtes van de twee zijden op te tellen. Het wordt uitgevoerd en toont de verkeerde oppervlakte zonder foutmelding. Wat voor fout is dit?
  1. Een logische fout.
  2. Een syntaxisfout.
  3. Een ReferenceError.
  4. Een laadfout.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

De uitvoering wordt onderbroken op total = total + 7; wanneer total 11 is. Welke waarde verschijnt vóór het uitvoeren van de stap zonder een functie binnen te gaan en welke erna?
  1. Vóór: 18; erna: 25.
  2. Vóór: 11; erna: 11.
  3. Vóór: 11; erna: 18.
  4. Vóór: undefined; erna: 18.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Je wilt telkens wanneer een regel wordt bereikt een diagnosemelding, zonder te onderbreken of het script te wijzigen. Welke debuggerfunctie past daarbij?
  1. Een onderbrekingspunt op een regel.
  2. Een voorwaardelijk onderbrekingspunt.
  3. Een onderbrekingspunt voor uitzonderingen.
  4. Een logpunt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een consolemelding aan het begin van een script ontbreekt en de console toont een 404 voor de URL van dat script. Wat moet je eerst controleren?
  1. Het type van het berekende eindtotaal van het script.
  2. Het scriptpad en of het bestand daar bestaat.
  3. De volgorde van voorwaarden in het geladen script.
  4. Het bereik van variabelen na de laatste instructie.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat gebeurt er wanneer dit script wordt geladen?

console.log("Begin");
let size = 4;
let size = 7;
  1. Het toont “Begin” en stopt daarna met een TypeError.
  2. Een SyntaxError verhindert dat ook maar één regel van dit script wordt uitgevoerd.
  3. Het toont “Begin” en verandert daarna size in 7.
  4. Het toont “Begin” en stopt daarna met een ReferenceError.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een totaal is verkeerd. Logmeldingen tonen base: 13 number, extra: 4 string en total: 134 string. Waar moet de verbetering beginnen?
  1. Converteer het samengevoegde totaal na de optelling.
  2. Maak het samengevoegde totaal op met twee decimalen.
  3. Verander het label dat naast het totaal wordt getoond.
  4. Converteer de extra invoer vóór de optelling.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een onderbroken programma toont raw = "27", fee = 6 en total = "276" direct vóór if (total > 100). Welke wijziging verhelpt de onjuiste indeling als hoog totaal?
  1. Gebruik Number(raw) + fee bij het berekenen van total.
  2. Gebruik Number(total) > 100 in de voorwaarde.
  3. Gebruik total >= 100 in de voorwaarde.
  4. Gebruik total === "276" in de voorwaarde.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een script dat tijdens het laden wordt uitgevoerd, toont een onjuist resultaat. Je stelt na het laden van de pagina een onderbrekingspunt in op de berekening, maar de uitvoering wordt nooit onderbroken. Hoe kun je de berekening en het toegewezen resultaat inspecteren?
  1. Hervat het voltooide script en inspecteer daarna het oude resultaat van de toewijzing.
  2. Ga de voltooide pagina binnen en inspecteer daarna de oorspronkelijke brontekst.
  3. Laad opnieuw tot het onderbrekingspunt en voer daarna de toewijzing als stap uit.
  4. Verplaats het onderbrekingspunt tot na het script en wacht tot het zichzelf opnieuw uitvoert.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Welke meldingen worden getoond voordat deze code stopt?

console.log("One");
let current = 5;
current += unknownStep;
console.log("Two");

Neem aan dat unknownStep geen declaratie heeft.

  1. Geen van beide; de bijwerking veroorzaakt SyntaxError.
  2. Beide meldingen; de ontbrekende waarde wordt NaN.
  3. Alleen “Two”; de eerdere logmelding wordt teruggedraaid.
  4. Alleen “One”; de bijwerking veroorzaakt ReferenceError.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Neem voor elke invoer een nieuwe uitvoering aan. Wat gebeurt er bij null en bij " 5 "?

const cleaned = input.trim() !== "" && input !== null;
const total = cleaned ? Number(input) + 2 : 0;
console.log(total);
  1. Null veroorzaakt TypeError; tekst toont 7.
  2. Null toont 0; tekst toont 7.
  3. Null veroorzaakt TypeError; tekst toont "52".
  4. Null toont 0; tekst toont "52".
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Herstel berekeningen en beslissingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat geeft Math.floor(-3.2) terug?
  1. -3
  2. -4
  3. 4
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welk bericht levert `Packed ${count} ${count === 1 ? "box" : "boxes"}` op bij const count = 2;?
  1. “Packed 2 box”
  2. “Packed 2 false”
  3. “Packed 2 boxes”
  4. “Packed count boxes”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een controle van een bestandseinde moet ongeacht hoofdletters en kleine letters werken. Welke expressie herkent bij const label = "Draft.PDF"; het PDF-einde?
  1. label.toLowerCase().endsWith(".pdf")
  2. label.endsWith(".pdf")
  3. label.trim().endsWith(".pdf")
  4. label.toUpperCase().endsWith(".pdf")
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een mislukte conversie naar een getal is opgeslagen in value. Welke test herkent die waarde correct als NaN?
  1. value === NaN
  2. typeof value === "NaN"
  3. value == NaN
  4. Number.isNaN(value)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke waarden bevatten saved en total aan het einde?

let total = 8;
const saved = total++;
total *= 3;
total -= saved;
  1. saved = 9, total = 18
  2. saved = 8, total = 16
  3. saved = 9, total = 19
  4. saved = 8, total = 19
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een standaardaantal mag alleen 3 zijn wanneer het oorspronkelijke aantal null of undefined is. Welk paar resultaten geven count ?? 3 en count || 3 als count gelijk is aan 0, en welke expressie voldoet aan de regel?
  1. 3 en 3; beide expressies voldoen aan de regel.
  2. 0 en 0; beide expressies voldoen aan de regel.
  3. 0 en 3; de expressie met terugval bij null of undefined voldoet.
  4. 3 en 0; de OF-expressie voldoet aan de regel.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een label moet “gold” zijn bij 90 of meer en “silver” bij 70–89. Wat is er verkeerd aan dit resultaat en welke wijziging herstelt de overlappende grenzen?

const points = 94;
let badge;
if (points >= 70) {
  badge = "silver";
} else if (points >= 90) {
  badge = "gold";
} else {
  badge = "none";
}
  1. De code wijst “gold” toe; test 70 vóór 90.
  2. De code wijst “silver” toe; test 90 vóór 70.
  3. De code wijst “silver” toe; verander >= 90 in > 90.
  4. De code wijst “none” toe; verander >= 70 in > 70.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Na het converteren van een antwoord uit een prompt gebruikt een programma if (!value) om ongeldige numerieke invoer af te wijzen. De gebruiker voert "0", "bad" of "-2" in. Wat gaat er mis bij deze controle?
  1. Nul en NaN worden afgewezen, maar het negatieve getal wordt geaccepteerd.
  2. Nul wordt geaccepteerd, maar NaN en het negatieve getal worden afgewezen.
  3. Alle drie worden afgewezen omdat geen ervan een positief getal is.
  4. Alle drie worden geaccepteerd omdat antwoorden uit een prompt strings zijn.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat wordt er getoond?

let stock = 0;
let status = "empty";
if (stock = 3) {
  status = "ready";
}
console.log(stock, status);
  1. 0 empty
  2. 0 ready
  3. 3 ready
  4. 3 empty
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een totaal overschrijdt alleen bij sommige invoerwaarden de grens. Je hebt alle lokale waarden nodig op de eerste regel van de tak voor een hoog totaal, zonder bij gewone gevallen te onderbreken. Wat stel je in en wat inspecteer je?
  1. Een logpunt op die regel; inspecteer een onderbroken Scope-deelvenster.
  2. Een voorwaardelijk onderbrekingspunt op die regel; inspecteer Scope en Watch.
  3. Een onderbrekingspunt na de uitvoering; inspecteer eerdere actuele waarden.
  4. Een onderbrekingspunt voor uitzonderingen; wacht tot het verkeerde totaal een fout opwerpt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 6: Combineer invoer, typen en besturingsverloop10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Twee externe klassieke scripts zijn afhankelijk van de HTML-volgorde en moeten worden uitgevoerd nadat het document is ontleed. Welk laadattribuut moeten beide gebruiken?
  1. async
  2. Alleen src
  3. defer alleen op inlinekopieën
  4. defer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een logmelding toont een waarde waarvan typeof gelijk is aan "number", maar die nooit gelijk is aan zichzelf. Welke waarde is het en hoe test je die rechtstreeks?
  1. NaN; gebruik Number.isNaN(value).
  2. null; gebruik value === null.
  3. undefined; gebruik value === undefined.
  4. Infinity; gebruik value === Infinity.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat wordt er getoond?

const massKg = 2.75;
const message = `Load: ${(massKg * 4).toFixed(2)} kg`;
console.log(message);
  1. “Load: 11 kg”
  2. “Load: 2,754 kg”
  3. “Load: 11.00 kg”
  4. “Load: 11.0 kg”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Je stelt een onderbrekingspunt in op const cleaned = raw.trim(); en de uitvoering wordt daar onderbroken. Hoe krijg en inspecteer je de geïnitialiseerde waarde van cleaned?
  1. Inspecteer cleaned voordat je de instructie uitvoert.
  2. Voer de instructie als stap uit en inspecteer daarna cleaned.
  3. Hervat en verwacht een onderbreking op de volgende regel.
  4. Verlaat de functie om de initialisatie van de variabele over te slaan.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat wordt er getoond?

const raw = "18";
const fee = 3;
const total = raw * 2 + fee;
const label = raw + fee * 2;
console.log(total, label);
  1. "363" en "186"
  2. 39 en 42
  3. 39 en "186"
  4. "363" en 42
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke waarde wijst deze code aan label toe als de invoer een string of null kan zijn en de invoer " " is?

const input = "   ";
const cleaned = input !== null && input.trim();
const label = cleaned ?? "Guest";
  1. ""
  2. "Guest"
  3. false
  4. null
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat wordt er getoond?

const raw = "3";
let result = "";
switch (Number(raw)) {
  case 3:
    result += "M";
  case 4:
    result += "N";
    break;
  default:
    result = "X";
}
console.log(result);
  1. “M”
  2. “MN”
  3. “X”
  4. “MNX”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

De laatste logmelding moet voor elke tak een verzendlabel tonen. Welke verbetering behoudt het bedoelde buitenste resultaat?

let label = "pending";
if (true) {
  let label = "sent";
}
console.log(label);
  1. Verander de buitenste declaratie in const label = "pending";.
  2. Verander de binnenste declaratie in const label = "sent";.
  3. Verwijder de buitenste declaratie en behoud de laatste logmelding.
  4. Verander de binnenste regel in label = "sent";.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een meetwaarde kan null, NaN of een getal zijn. Het geldige interval bevat 0 en 10. Welke test accepteert precies de numerieke waarden in dat interval?
  1. !Number.isNaN(value) && value >= 0 && value <= 10
  2. value !== null && !Number.isNaN(value) && value > 0 && value < 10
  3. value !== null && !Number.isNaN(value) && value >= 0 && value <= 10
  4. value !== null && !Number.isNaN(value) && (value >= 0 || value <= 10)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een script laadt zonder fout, maar toont een gemiddelde van 32 voor de metingen 8, 12 en 36. De logmelding van de som is 56; de berekening is 8 + 12 + 36 / 3. Welke diagnose en verbetering passen bij alle aanwijzingen?
  1. Alleen 36 wordt gedeeld; gebruik (8 + 12 + 36) / 2.
  2. Alleen een deel van de som moet worden gegroepeerd; gebruik 8 + (12 + 36) / 3.
  3. De eerste twee waarden moeten worden gegroepeerd; gebruik (8 + 12) / 3 + 36.
  4. Alleen 36 wordt gedeeld; gebruik (8 + 12 + 36) / 3.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

85 Kernbegrippen, elk met een definitie

A

Async-attribuut
Het async-attribuut laat een script tijdens het ontleden downloaden en uitvoeren zodra het klaar is, zonder de HTML-volgorde te behouden.
Een onafhankelijke bezoekersteller kan async gebruiken wanneer geen ander script ervan afhangt dat de teller eerst wordt uitgevoerd.

B

Bewakingsexpressie
Een bewakingsexpressie is een expressie die de debugger tijdens het doorlopen opnieuw evalueert, zodat je een waarde of voorwaarde over meerdere onderbrekingen kunt volgen.
Door typeof total aan Watch toe te voegen, kun je de exacte instructie ontdekken waar een numerieke waarde een string wordt.
Binding
Een binding is het verband tussen een naam en de waarde waarnaar die verwijst; const voorkomt dat dit verband na initialisatie wordt vervangen.
Een eigenschap van een const-object wijzigen behoudt de binding omdat de naam nog steeds naar hetzelfde object verwijst.
Blokbereik
Blokbereik is het gebied dat bestaat uit een omringend blok en de daarin geneste blokken, waar een let- of const-binding bij hoort.
Een const message die binnen een if-blok is gedeclareerd, kan na dat blok niet worden gelezen.
Booleaanse context
Een booleaanse context is een plaats waar het gedrag afhangt van de vraag of een waarde truthy of falsy is, zoals een if-voorwaarde of de test van een logische operator.
Een niet-lege bijnaam slaagt voor een if-test, maar een lege string niet, hoewel beide waarden het type string hebben.
Booleaanse waarde
Een booleaanse waarde is een van de twee waarden true en false, die vaak door vergelijkingen worden opgeleverd en ja-neeresultaten weergeven.
De expressie heightM >= 2 geeft een booleaanse waarde terug die kan bepalen of een hoogte aan een eis voldoet.

C

CamelCase
CamelCase is een naamgevingsstijl waarbij een naam met meerdere woorden met een kleine letter begint en elk volgend woord met een hoofdletter, zonder spaties.
De namen firstName en totalMassKg tonen woordgrenzen en blijven tegelijk geldige JavaScript-namen.
Commentaar
Commentaar is tekst voor menselijke lezers die JavaScript tijdens de uitvoering overslaat. Je markeert die met // of een bij elkaar passend paar /* en */.
Door // vóór een tijdelijke logmelding te zetten, voorkom je dat die wordt uitgevoerd en blijft de tekst beschikbaar voor later.
Concatenatie
Concatenatie voegt tekstwaarden samen tot een nieuwe string; de operator + doet dit wanneer de gewone primitieve operanden een string bevatten.
Bij het samenvoegen van "Good" + " " + "morning" staat een spatie omdat de middelste string die expliciet levert.
Console
De console is een paneel in de ontwikkelaarstools dat scriptmeldingen en fouten toont en waarmee je JavaScript-expressies kunt evalueren.
Als je 6 * 7 in de console van de pagina invoert, verschijnt 42 zonder dat je een instructie aan het opgeslagen script toevoegt.

D

Debugger
Een debugger is een ontwikkelhulpmiddel dat de uitvoering kan onderbreken, waarden binnen het onderbroken bereik kan inspecteren en code stap voor stap kan doorlopen.
Als je vóór een voorwaarde met een totaal onderbreekt, kun je ontdekken dat het totaal samengevoegde tekst is, ook al converteert de voorwaarde die later naar een getal.
Declaratie
Een declaratie introduceert een naam binnen een bereik met een sleutelwoord zoals let of const en kan ook de beginwaarde opgeven.
De instructie let result; declareert een variabele voordat latere code beslist welke waarde daarin wordt opgeslagen.
Defer-attribuut
Het defer-attribuut zorgt dat een extern klassiek script na het ontleden van de HTML wordt uitgevoerd, terwijl het downloaden tijdens het ontleden kan plaatsvinden.
Twee externe klassieke scripts met defer worden in hun HTML-volgorde uitgevoerd, ook als de tweede download eerder klaar is.
Doorvallen naar de volgende case
Doorvallen naar de volgende case betekent dat de uitvoering vanaf een overeenkomende switch-case doorgaat naar latere cases omdat geen break of andere uitgang die heeft gestopt.
Caselabels onder elkaar kunnen bewust een toewijzing delen, maar een ontbrekende break kan ook een ongewenst tweede label toevoegen.
Drijvendekommaweergave
Drijvendekommaweergave is een getalsweergave met een eindige verzameling binaire cijfers, waardoor veel decimale breuken bij benadering worden opgeslagen.
Een som zoals 0.1 + 0.2 kan extra cijfers aan het einde tonen omdat de opgeslagen breuken benaderingen zijn.
Dynamische typering
Dynamische typering betekent dat waarden typen hebben, terwijl een variabele na hertoewijzing naar waarden van verschillende typen kan verwijzen.
Na let data = 5; data = "five"; meldt typeof data het type van de nieuwe stringwaarde.

E

Een getal aan het begin van tekst uitlezen
Een getal aan het begin van tekst uitlezen betekent dat je een getal vanaf het begin van de tekst leest en stopt bij het eerste teken dat niet bij het getal past.
De aanroep parseFloat("6.2 kg") leest 6.2, terwijl Number("6.2 kg") de hele string afwijst met NaN.
Else-if-keten
Een else-if-keten is een geordende reeks voorwaarden die de eerste tak uitvoert waarvan de voorwaarde waar is en alle latere takken overslaat.
Door de hoogste minimumscore eerst te controleren, voorkom je dat een lagere grens een hogere score te vroeg opvangt.
Escapesequentie
Een escapesequentie begint met een backslash en staat in een string voor een teken zoals een aanhalingsteken, regeleinde, tab of backslash.
De sequentie \n maakt een regeleinde in tekst, ook als de code op één regel is geschreven.
Expliciete typeconversie
Expliciete typeconversie is een typeverandering die de programmeur bewust schrijft met een bewerking zoals Number(), String() of Boolean().
Door input te converteren voordat je een bedrag optelt, maak je duidelijk dat het programma een numeriek totaal verwacht.
Expressie
Een expressie is JavaScript-code die tot een waarde evalueert, die een andere expressie of instructie verder kan gebruiken.
De expressie price * count kan een waarde leveren aan een toewijzing of een plaatsaanduiding in een template.
Extern script
Een extern script is JavaScript die in een apart bestand is opgeslagen en die een HTML-scriptelement via het src-attribuut laadt.
Het element <script src="js/start.js"></script> koppelt de pagina aan code in een onderliggende map.

F

Falsy-waarde
Een falsy-waarde is een waarde die bij booleaanse conversie false wordt, waaronder nul, lege tekst, null, undefined en NaN.
Een numerieke hoeveelheid van 0 slaat if (quantity) over, ook als nul een toegestaan antwoord is in het programma.

G

Gegevenstype
Een gegevenstype is een categorie waarden die helpt bepalen welke bewerkingen van toepassing zijn en hoe die bewerkingen de waarden behandelen.
De waarden 9 en "9" worden vergelijkbaar getoond, maar hun typen verklaren waarom er één bij optellen verschillende resultaten geeft.
Globaal bereik
Globaal bereik is het bereik over de hele pagina van bindingen op het hoogste niveau van klassieke scripts, die andere klassieke scripts na initialisatie kunnen gebruiken.
Een later klassiek script kan een let count op het hoogste niveau lezen die door een eerder klassiek script is ingesteld.
Grondtal
Een grondtal is de basis die wordt gebruikt om cijfers te interpreteren; parseInt() accepteert die als tweede argument om de bedoelde basis expliciet te maken.
Met parseInt("11", 10) lees je decimaal elf, terwijl parseInt("11", 16) decimaal zeventien leest.

I

Impliciete conversie naar een getal
Impliciete conversie naar een getal is automatische conversie naar een numerieke waarde tijdens een bewerking die getallen verwacht, zoals aftrekken.
De expressie "14" - 2 levert 12 op zonder een variabele te veranderen die oorspronkelijk de string bevatte.
Impliciete typeconversie
Impliciete typeconversie is de automatische conversie van het type van een waarde door een operator of voorwaarde, volgens de JavaScript-regels voor die bewerking.
In "8" * 2 converteert vermenigvuldiging de tekst impliciet naar een getal voor de berekening en levert 16 op.
Index
Een index is een genummerde positie waarmee je code-eenheden van een string kunt benaderen, beginnend bij nul en eindigend bij de lengte min één.
In "planet" bevat index 0 de waarde "p" en index 5 de waarde "t"; index 6 ligt voorbij het einde.
Infinity
Infinity is een speciale getalswaarde die een onbegrensd positief resultaat weergeeft; JavaScript heeft ook de waarde negatieve Infinity.
De berekening 8 / 0 geeft Infinity terug, dus delen door nul werpt niet altijd een uitzondering op.
Initialisatie
Initialisatie geeft een gedeclareerde binding de beginwaarde; een const-declaratie moet die waarde in de declaratie zelf bevatten.
In const widthM = 4; is het getal 4 de initialisatiewaarde die ervoor zorgt dat de binding kan worden gelezen.
Inlinescript
Een inlinescript is JavaScript die binnen een scriptelement in een HTML-document is geschreven, tussen de openings- en sluitingstag.
Een kort blok <script>console.log("Hello");</script> kan rechtstreeks vanaf een HTML-pagina een melding tonen.
Instructie
Een instructie is een JavaScript-opdracht die een actie uitvoert, zoals een variabele declareren, een waarde toewijzen of een tak kiezen.
In let score = 8; console.log(score); wordt de declaratie-instructie vóór de loginstructie uitgevoerd.
Interpolatie
Interpolatie is het invoegen van een geëvalueerde expressie in omringende tekst, zoals JavaScript doet in plaatsaanduidingen van templates.
Bij name = "Nora" maakt interpolatie in `Hello, ${name}` de begroeting “Hello, Nora”.
Invoervalidatie
Invoervalidatie controleert of een ingevoerde waarde aan de eisen van een programma voldoet voordat die waarde verder wordt gebruikt.
Een hoeveelheidscontrole kan eerst Annuleren en lege tekst afwijzen en daarna NaN of negatieve getallen na conversie afwijzen.

J

JavaScript-engine
Een JavaScript-engine is het onderdeel van de browser dat JavaScript-code leest en uitvoert, inclusief de berekeningen en beslissingen.
Wanneer de pagina het script laadt, voert de engine console.log("Ready"); uit en toont de console “Ready”.

K

Kortsluitevaluatie
Kortsluitevaluatie slaat een operand over zodra een eerdere operand het resultaat bepaalt, zoals bij een falsy-linkeroperand van EN.
Door input !== null eerst te testen in een controle met EN, kun je een onveilige aanroep van input.trim() voorkomen wanneer input null is.

L

Logische EN
Logische EN is de operator &&, die vereist dat beide booleaanse tests slagen en stopt met evalueren bij de eerste falsy-operand.
Een bereikcontrole verbindt de onder- en bovengrens met &&, zodat een meetwaarde aan beide eisen moet voldoen.
Logische fout
Een logische fout is een vergissing in de redenering of berekening van een programma waardoor code wel wordt uitgevoerd, maar een onjuist resultaat oplevert.
Als je alleen het laatste getal in een som deelt, kan het verkeerde gemiddelde worden getoond zonder automatische foutmelding.
Logische NIET
Logische NIET is de operator !, die een operand naar een booleaanse waarde converteert en die omkeert; twee keer toepassen geeft als booleaanse waarde aan of de operand truthy of falsy is.
De expressie !"0" is false omdat de niet-lege string truthy is voordat de booleaanse waarde wordt omgekeerd.
Logische OF
Logische OF is de operator ||, die voldoet wanneer ten minste één booleaanse test slaagt en stopt met evalueren bij de eerste truthy-operand.
Een vlag die aangeeft dat iemand lid is of een voldoende hoog totaal kan aan een verzendvoorwaarde voldoen; beide hoeven niet tegelijk te gelden.
Logpunt
Een logpunt is een markering in de debugger die een melding toont wanneer de uitvoering de betreffende regel bereikt, zonder te onderbreken of het script te wijzigen.
Een logpunt kan elke bereikte waarde tonen terwijl de pagina blijft draaien, anders dan een onderbrekingspunt dat de uitvoering stopt.

M

Methode
Een methode is een functie die je via een waarde of object benadert en met haakjes aanroept om er een bewerking op uit te voeren.
De aanroep label.toLowerCase() levert tekst in kleine letters op, terwijl je de methode niet aanroept als je de haakjes weglaat.
Methoden aaneenschakelen
Methoden aaneenschakelen betekent dat je een methode aanroept op de waarde die de vorige aanroep teruggeeft, zodat je passende transformaties achter elkaar kunt schrijven.
De expressie " Note ".trim().toLowerCase() verwijdert eerst de buitenste spaties en verandert daarna de lettergrootte van het resultaat.
Modulescript
Een modulescript is een script dat met type="module" wordt geladen, een eigen bereik op het hoogste niveau heeft, strikte modus gebruikt en standaard uitgesteld wordt uitgevoerd.
Een lokaal beschikbaar gemaakte pagina kan <script type="module" src="js/main.js"></script> laden voor de modulecode.

N

NaN
NaN is een speciale waarde van het type number die een ongeldig getalsresultaat of een ongeldige conversie aangeeft en niet gelijk is aan zichzelf.
Als je "heavy" met Number() converteert, krijg je NaN, wat Number.isNaN() vóór berekeningen kan herkennen.
Niet-strikte gelijkheid
Niet-strikte gelijkheid is de vergelijking met ==, die operanden van verschillende typen volgens eigen gelijkheidsregels kan converteren.
De expressie "12" == 12 is true na conversie, dus geeft strikte gelijkheid een beter voorspelbare typecontrole.
Null
Null is een primitieve waarde die vaak bewust wordt toegewezen om een lege of ontbrekende waarde in de eigen gegevens van een programma weer te geven.
Een geannuleerde prompt geeft null terug, wat het programma kan controleren voordat het een stringmethode probeert aan te roepen.

O

Onderbrekingspunt
Een onderbrekingspunt markeert een plaats waar de uitvoering moet worden onderbroken voordat een instructie wordt uitgevoerd, zodat je de huidige programmatoestand kunt inspecteren.
Laad de pagina opnieuw nadat je een onderbrekingspunt hebt ingesteld in een script dat tijdens het laden wordt uitgevoerd, zodat de uitvoering die instructie opnieuw bereikt.
Onveranderlijkheid
Onveranderlijkheid betekent dat de inhoud van een waarde niet ter plekke kan veranderen; bewerkingen op primitieve waarden leveren in plaats daarvan nieuwe waarden op.
De toewijzing text = text.trim(); vervangt de waarde van de variabele door een nieuwe string in plaats van de oude te wijzigen.
Operatorprioriteit
Operatorprioriteit is de regel die bepaalt welke operatoren in een expressie het eerst binden, tenzij haakjes de groepering veranderen.
In 4 + 6 * 2 wordt vermenigvuldiging vóór optelling uitgevoerd, dus is het resultaat 16 in plaats van 20.
Opmaak
Opmaak verandert hoe een waarde als tekst wordt weergegeven, bijvoorbeeld door een vast aantal decimalen toe te voegen, terwijl het oorspronkelijke getal ongewijzigd blijft.
Als je (6).toFixed(2) binnen een template gebruikt, verschijnt "6.00" zonder dat de oorspronkelijke numerieke waarde verandert.
Overschaduwing
Overschaduwing ontstaat wanneer een binnenste bereik een naam declareert die al in een buitenste bereik wordt gebruikt, waardoor de buitenste binding binnen het binnenste bereik verborgen is.
Als je let total = 2 binnen een blok declareert, blijft een afzonderlijke buitenste total ongewijzigd wanneer het blok eindigt.

P

Plaatsaanduiding
Een plaatsaanduiding is het deel ${...} van een templateliteral waar een expressie wordt geëvalueerd en de tekstvorm ervan wordt ingevoegd.
Binnen `Mass: ${count * massKg} kg` berekent de plaatsaanduiding het totaal voordat die het invoegt.
Postfixincrement
Postfixincrement is de vorm name++ die de variabele met één verhoogt, maar de oude waarde aan de omringende expressie teruggeeft.
Bij let n = 3; const old = n++; krijgt old de waarde 3, terwijl de bijgewerkte n gelijk wordt aan 4.
Primitieve waarde
Een primitieve waarde is een waarde van een van de zeven primitieve typen van JavaScript, waarvan de inhoud niet ter plekke kan worden gewijzigd.
Een stringmethode geeft een nieuwe tekstwaarde terug; de methode kan de inhoud van de oorspronkelijke string niet herschrijven.

R

ReferenceError
Een ReferenceError is een fout die ontstaat wanneer een binding niet kan worden gebruikt, bijvoorbeeld omdat de naam onbekend is of de binding niet is geïnitialiseerd.
Een typefout in totl + 5 kan een ReferenceError veroorzaken, ook al bestaat in de buurt een correct gespelde variabele total.
Rekenkundige operator
Een rekenkundige operator voert een berekening uit, zoals optellen, aftrekken, vermenigvuldigen, delen, de rest bepalen of machtsverheffen.
De expressie massKg * count gebruikt vermenigvuldiging om de totale massa uit twee numerieke waarden te berekenen.
Relationele vergelijking
Een relationele vergelijking test de volgorde met <, >, <= of >=; twee strings gebruiken tekstvolgorde, terwijl operanden van verschillende typen numeriek kunnen worden geconverteerd.
De test "30" < "7" is waar als tekstvergelijking, maar als je beide waarden naar getallen converteert, keert het resultaat om.
Rest
Een rest is de waarde die overblijft nadat hele delingen zijn meegerekend; de JavaScript-operator % levert deze waarde op.
Voor een positieve lengte van 478 cm geeft 478 % 100 de 78 cm die na de hele meters overblijft.

S

Samengestelde toewijzing
Een samengestelde toewijzing combineert een bewerking met het opslaan van het resultaat, met een operator zoals +=, -= of *= op een bestaande variabele.
Bij let code = "7"; slaat code += 2 de waarde "72" op omdat samengestelde optelling nog steeds de regel voor het samenvoegen van tekst volgt.
Standaardgeval
Een standaardgeval is het beginpunt in een switch-instructie dat wordt gebruikt wanneer geen casewaarde overeenkomt met de invoer en dat gedrag biedt voor waarden zonder overeenkomst.
Een switch-instructie voor een modus kan in default "normal" toewijzen wanneer de invoer met geen van de genoemde speciale modi overeenkomt.
Stap uitvoeren zonder een functie binnen te gaan
Een stap uitvoeren zonder een functie binnen te gaan is een bediening in de debugger die de huidige instructie uitvoert en opnieuw onderbreekt zonder functies binnen te gaan die door die instructie worden aangeroepen.
Voer een toewijzing als stap uit voordat je het nieuwe resultaat inspecteert, omdat de gemarkeerde regel bij de onderbreking nog niet is uitgevoerd.
Strikte gelijkheid
Strikte gelijkheid is de vergelijking met ===, die de typen van operanden niet converteert en waarden van verschillende typen als ongelijk beoordeelt.
De expressie "12" === 12 is false omdat overeenkomende tekst met cijfers nog steeds een ander type heeft dan een getal.
Strikte modus
Strikte modus is een uitvoeringsmodus van JavaScript die bepaalde fouten die anders onopgemerkt blijven, waaronder niet-gedeclareerde toewijzingen, in foutmeldingen verandert.
Een klassiek script beginnen met "use strict"; helpt een verkeerd gespelde variabele bij de eerste toewijzing te ontdekken.
String
Een string is een onveranderlijke reeks UTF-16-code-eenheden voor het weergeven van tekst, geschreven met bij elkaar passende aanhalingstekens of backticks.
De cijfers in "203" vormen tekst die je kunt samenvoegen of doorzoeken zonder dat die het getal 203 wordt.
Switch-instructie
Een switch-instructie vergelijkt één waarde strikt met caselabels, begint bij een overeenkomst en gaat door tot een break of het einde.
Een stringwaarde "4" slaat een numeriek case 4: over, tenzij de invoer vóór de switch-instructie is geconverteerd.
Syntaxisfout
Een syntaxisfout is een overtreding van de grammaticaregels van JavaScript die verhindert dat het betreffende script wordt ontleed en met de uitvoering begint.
Een niet-gesloten haakje kan zelfs verhinderen dat een eerdere opstartmelding in hetzelfde script ooit wordt uitgevoerd.

T

Tak
Een tak is een codeblok dat door een voorwaarde wordt gekozen, zodat een programma voor verschillende gevallen verschillende instructies kan uitvoeren.
Een else-tak kan verzendkosten toewijzen wanneer de voorwaarde voor gratis verzending als falsy is geëvalueerd.
Templateliteral
Een templateliteral is een string tussen backticks die ingebedde expressies en letterlijke regeleinden in de tekst ondersteunt.
Een bericht zoals `Count: ${count}` plaatst het huidige aantal naast het beschrijvende label.
Terugval bij null of undefined
Terugval bij null of undefined is de operator ??, die alleen bij null of undefined een terugvaloptie kiest en andere falsy-waarden behoudt.
Als count gelijk is aan 0, behoudt count ?? 3 de nul, terwijl count || 3 die vervangt door de terugvalwaarde.
Tijdelijke dode zone
De tijdelijke dode zone is het deel van het bereik van een binding vóór de initialisatie, waarin toegang tot een let of const een ReferenceError veroorzaakt.
Een binnenste let price verhindert dat een eerdere leesbewerking in hetzelfde blok een buitenste variabele price bereikt.
Toewijzing
Een toewijzing evalueert een expressie rechts en slaat de waarde met de operator = op in de benoemde binding links.
De bijwerking count = count + 1; gebruikt de vorige count om de waarde te berekenen die deze vervangt.
Tolerantie
Een tolerantie is een gekozen grens voor een aanvaardbaar numeriek verschil, gebruikt wanneer de nauwkeurigheid van een berekening exacte gelijkheid ongeschikt maakt.
Door een absoluut decimaal verschil met een kleine grens te vergelijken, kun je afrondingsruis accepteren zonder exacte gelijkheid te vereisen.
Truthy-waarde
Een truthy-waarde is een waarde die bij booleaanse conversie true wordt; niet-lege strings zijn truthy ongeacht hun inhoud.
De strings "false" en "0" slagen voor tests op truthy of falsy omdat beide tekens bevatten en niet leeg zijn.
TypeError
Een TypeError is een fout die ontstaat wanneer een bewerking niet geschikt is voor de waarde, waaronder een ongeldige aanroep of een verboden hertoewijzing aan een const.
De aanroep text.length() behandelt een numerieke eigenschap als een functie, dus veroorzaakt de bewerking een TypeError.

U

Uitvoering stap voor stap volgen
De uitvoering stap voor stap volgen betekent dat je de uitvoering en tussenwaarden volgt om te vinden waar het werkelijke gedrag voor het eerst afwijkt van het verwachte resultaat.
Door de som en deler afzonderlijk te tonen, kun je een verkeerd gemiddelde herleiden tot de stap die de rekenkundige bewerkingen groepeert.
Uitvoeringsfout
Een uitvoeringsfout is een uitzondering die wordt opgeworpen terwijl code wordt uitgevoerd; als die niet wordt afgehandeld, stopt de uitvoering bij de bewerking die de fout veroorzaakt.
Een onbekende variabele op een latere regel kan het script stoppen nadat de eerdere loginstructies al zijn uitgevoerd.
Unaire plus
De unaire plus is de operator + die op één operand wordt toegepast om conversie naar een getal te vragen, in plaats van twee operanden op te tellen.
De expressie +"31" levert het getal 31 op, terwijl "31" + 1 tekst samenvoegt en "311" oplevert.
Undefined
Undefined is de primitieve waarde die vaak wordt gebruikt wanneer geen waarde is gegeven, zoals nadat een let-declaratie zonder initialisatie is uitgevoerd.
Na let nickname; geeft het lezen van de geïnitialiseerde binding undefined totdat een andere toewijzing plaatsvindt.

V

Variabele
Een variabele is een benoemde binding die naar een waarde verwijst, zodat het programma die opnieuw kan lezen en, als de binding dat toestaat, er een nieuwe waarde aan kan toewijzen.
Een naam zoals distanceKm houdt de gemeten afstand beschikbaar voor latere berekeningen en berichten.
Vergelijking
Een vergelijking evalueert een relatie tussen waarden en levert true of false op, bijvoorbeeld bij een overeenkomst, ongelijkheid of grens.
De vergelijking massKg <= 20 omvat precies 20 en kan worden opgeslagen als het booleaanse resultaat van een grenscontrole.
Voorwaardelijk onderbrekingspunt
Een voorwaardelijk onderbrekingspunt onderbreekt alleen op de betreffende regel wanneer een opgegeven expressie waar is, zodat je relevante gevallen gericht kunt inspecteren.
Een onderbrekingspunt met de voorwaarde total > 200 slaat gewone kleinere totalen over en onderbreekt wanneer een hoog resultaat moet worden geïnspecteerd.
Voorwaardelijke operator
De voorwaardelijke operator is de expressie condition ? a : b, die een voorwaarde evalueert en de waarde van de gekozen expressie teruggeeft.
Een korte toewijzing kan op basis van een booleaanse waarde "open" of "closed" kiezen zonder twee afzonderlijke toewijzingstakken te schrijven.

W

Wetten van De Morgan
De wetten van De Morgan beschrijven hoe het ontkennen van een gecombineerde booleaanse test elke operand omkeert en EN in OF of OF in EN verandert.
Een waarde buiten een interval inclusief de grenzen ligt onder de ondergrens OF boven de bovengrens; dit keert de test op binnen het interval om.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag