- Leren
- Informatica & ICT
- Programmeren
- JavaScript programmeren: DOM, events, asynchrone code en modules
- Variabelen en gegevenstypen in JavaScript
Werken met variabelen en gegevenstypen in JavaScript
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
- 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-paginaKoppel 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 consoleSchrijf instructies en commentaar, voer code uit in de browserconsole en toon uitvoer met
console.logen de ingebouwde dialoogvensters van de browser.
- Voeg JavaScript toe aan een HTML-pagina
- Declareer variabelen met duidelijke namen, kies tussen
letenconsten voorspel waar je elke variabele kunt gebruiken.- Declareer variabelen en geef ze een naamMaak variabelen met
letenconst, geef ze geldige en leesbare namen en werk de variabelen bij die veranderen. - Voorspel het bereik van variabelen en de foutmeldingen bij let en constVoorspel in welk deel van de code je een variabele kunt gebruiken en herken en verhelp de fouten die
letenconstopleveren.
- Declareer variabelen en geef ze een naam
- Herken de gegevenstypen van JavaScript, reken correct met getallen en bouw tekst op en wijzig die met strings en templateliterals.
- Herken gegevenstypen met typeofBenoem de gegevenstypen van JavaScript, onderscheid
nullvanundefineden controleer het type van elke waarde mettypeof. - Reken met getallen en rekenkundige operatorenGebruik de rekenkundige operatoren en toewijzingsoperatoren, pas operatorprioriteit toe, rond resultaten af en herken de beperkingen van drijvendekommagetallen en speciale getalswaarden.
- Maak en wijzig stringsSchrijf stringliterals, voeg aanhalingstekens en speciale tekens toe en gebruik de lengte, indexposities en veelgebruikte methoden van strings.
- Bouw tekst op met templateliteralsVoeg waarden en expressies in tekst in met strings tussen backticks, schrijf tekst over meerdere regels en maak getallen in berichten op.
- Herken gegevenstypen met typeof
- Converteer waarden bewust met
Number(),String()enBoolean()en voorspel de automatische conversies die JavaScript uitvoert in operatoren en voorwaarden.- Converteer waarden explicietZet tekst om in getallen en andere waarden in strings of booleaanse waarden, en controleer of een conversie is gelukt.
- Voorspel impliciete typeconversieVoorspel de resultaten van operatoren die op verschillende typen worden toegepast en gebruik truthy- en falsy-waarden bewust.
- Converteer waarden expliciet
- Vergelijk waarden correct, combineer voorwaarden met logische operatoren en kies welke code wordt uitgevoerd met
if,else, de voorwaardelijke operator enswitch.- Vergelijk waardenGebruik vergelijkingsoperatoren om
trueoffalsete krijgen en voorspel vergelijkingen van strings, verschillende typen,null,NaNen decimale getallen. - Combineer voorwaarden met logische operatorenVerbind voorwaarden en keer ze om met
&&,||en!, gebruik kortsluitevaluatie en geef standaardwaarden op met||en??. - Kies uitvoeringspaden met if, else, de voorwaardelijke operator en switchSchrijf ketens met
if,else ifenelse, kies waarden met de voorwaardelijke operator en handel vaste gevallen af metswitch.
- Vergelijk waarden
- 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 consoleOnderscheid 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 debuggerStel onderbrekingspunten in, doorloop code regel voor regel en inspecteer variabelen terwijl de uitvoering is onderbroken.
- Lees foutmeldingen en volg waarden met de console
Variabelen en gegevenstypen in JavaScript: uitleg
1Voer 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.
| Laadkeuze | Wanneer het script wordt uitgevoerd | Volgorde van meerdere scripts |
|---|---|---|
| Klassiek, zonder attribuut | Wanneer het ontleden het script bereikt, na het laden | HTML-volgorde |
defer | Na het ontleden van de HTML | HTML-volgorde |
async | Zodra het downloaden is voltooid | Volgorde 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
undefineddie 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 ofnullterug enconfirm()geeft een booleaanse waarde terug.- Strikte modus meldt toewijzingen aan niet-gedeclareerde namen als fouten.
2Sla 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.
| Declaratie | Beginwaarde nodig? | Kan aan de naam opnieuw een waarde worden toegewezen? |
|---|---|---|
let | Nee | Ja |
const | Ja | Nee |
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
consten gebruikletwanneer 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
| Probleem | Fouttype | Oplossing |
|---|---|---|
const rate; | SyntaxError | Geef een beginwaarde op |
Een tweede let total binnen één bereik | SyntaxError | Wijs een waarde toe zonder nogmaals let |
| Lezen vóór initialisatie | ReferenceError | Initialiseer vóór het lezen |
| Een onbekende naam of een naam buiten bereik lezen | ReferenceError | Verbeter de naam of verplaats de declaratie |
Opnieuw een waarde toewijzen aan een const | TypeError | Gebruik 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
letenconsthebben 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
consttijdens de uitvoering eenTypeErrorgeeft. - De inhoud van een object met
constkan veranderen zonder dat aan de naam opnieuw een waarde wordt toegewezen.
3Reken 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. typeofgeeft een string terug die het type van een waarde noemt.undefinedbetekent vaak dat geen waarde is toegewezen;nullgeeft meestal een bewust ontbrekende waarde aan.typeof nullis"object"entypeof NaNis"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
| Operator | Betekenis | Voorbeeld |
|---|---|---|
+, - | Optellen, aftrekken | 8 - 3 geeft 5 |
*, / | Vermenigvuldigen, delen | 7 / 2 geeft 3.5 |
% | Rest | 17 % 5 geeft 2 |
** | Machtsverheffen | 2 ** 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
| Hulpmiddel | Regel voor het resultaat | Voorbeeld |
|---|---|---|
Math.round() | Dichtstbijzijnde gehele getal; helften naar positieve oneindigheid | Math.round(-2.5) geeft -2 |
Math.floor() | Naar beneden, richting negatieve oneindigheid | Math.floor(-2.5) geeft -3 |
Math.ceil() | Naar boven, richting positieve oneindigheid | Math.ceil(2.1) geeft 3 |
Math.trunc() | Laat het deel achter de komma weg, richting nul | Math.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.
NaNen 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. lengthis 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.
4Converteer 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()kannullenundefinedveilig 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.
5Vergelijk 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
NaNvóó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
| Expressie | Wanneer de terugvaloptie de invoer vervangt |
|---|---|
| `value | |
value ?? fallback | Alleen 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 alleennullenundefineden 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.
switchvergelijkt strikt en heeftbreaknodig om doorvallen te stoppen.
6Vind 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
| Soort | Wat gebeurt er | Voorbeeld |
|---|---|---|
| Syntaxisfout | Het script kan niet worden ontleed; niets van dat script wordt uitgevoerd | Een niet-gesloten haakje |
| Uitvoeringsfout | De uitvoering bereikt een instructie die een uitzondering opwerpt; eerdere instructies zijn uitgevoerd | Een onbekende naam lezen |
| Logische fout | De code wordt uitgevoerd, maar het resultaat is verkeerd | Alleen 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 Chrome | Sneltoets | Effect |
|---|---|---|
| Hervatten | F8 | Ga verder tot het volgende onderbrekingspunt of het einde |
| Stap uitvoeren zonder een functie binnen te gaan | F10 | Voer de huidige instructie uit zonder een aangeroepen functie binnen te gaan |
| Functie binnengaan | F11 | Ga een aangeroepen functie binnen als die beschikbaar is voor de debugger |
| Functie verlaten | Shift+F11 | Voltooi 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
1Laad een script en lees de eerste meldingen
13 stappen
- 1IntroductieGeef 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.
- 2UitlegKies inlinecode of externe code
Een inlinescript bevat code tussen de tags. Een extern script gebruikt
srcom 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
srcaanwezig is. Behoud de sluitingstag</script>; HTML behandelt dit element niet als zelfsluitend. - 3VoorbeeldStem het pad af op de mappen
Plaats
index.htmlnaast een map met de naamjs, metgreet.jsin die map. Het padsrc="js/greet.js"van de pagina begint in de HTML-map en gaat naarjs.Schrijf in het JavaScript-bestand:
console.log("Page ready");Sla beide bestanden op. Een pad
greet.jszou naast het HTML-bestand zoeken in plaats van in de onderliggende map en dit script dus niet vinden. - 4UitlegVoer uit nadat de pagina is ontleed
Voeg
defertoe 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
deferaan klassieke inlinecode toevoegt, wordt die niet uitgesteld. - 5UitdagingHoud afhankelijke scripts op volgorde
Een pagina heeft
setup.jsgevolgd doordisplay.jsin de head. Het tweede script gebruikt een waarde uit het eerste en beide hebben ontlede pagina-inhoud nodig. Zouasyncop 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
deferop beide externe klassieke scripts en houd setup eerst in de HTML. - 6VerbandHerken 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. - 7TipOpen de console voor deze pagina
Open in Chrome of Edge de console met
Ctrl+Shift+Jop Windows/Linux ofCmd+Option+Jop Mac. Firefox gebruiktCtrl+Shift+KofCmd+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. - 8VoorbeeldOnderscheid tonen van evalueren
Voer deze regels afzonderlijk in de console in:
let total = 9; total; console.log("Total:", total);De declaratie kan
undefinedals resultaat tonen. Het lezen vantotalgeeft nog steeds9. De laatste aanroep toont “Total: 9” en geeft zelfundefinedterug. Het getoonde resultaat van een instructie is niet noodzakelijk de waarde die in de variabele is opgeslagen of de melding die de aanroep toont. - 9UitdagingLees een declaratie in de console
Je voert
let count = 6;in en zietundefined. Daarna voer jecount + 2in. 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. - 10UitlegGebruik 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 zoalstotl = 5;meldt dan een fout in plaats van onbedoeld een globale naam te maken. - 11VoorbeeldInspecteer 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 enalert()toont een melding. Een dialoogvenster wacht op het antwoord voordat de volgende instructie wordt uitgevoerd. - 12UitdagingVerbind 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.
- 13SamenvattingControleer 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.
2Volg declaraties, bijwerkingen en bereik
11 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieVolg één waarde door een programma
- 2UitlegKies declaraties op basis van hertoewijzing
- 3VoorbeeldLees de oude waarde voordat je de nieuwe opslaat
- 4VoorbeeldBereken een eindwaarde één keer
- 5UitdagingKies de passende declaratie
- 6UitlegPlaats een gedeeld resultaat buiten de takken
- 7UitdagingHerken overschaduwing
- 8KernpuntEen binding kan bestaan voordat die klaar is
- 9TipLees het fouttype als aanwijzing
- 10UitdagingHerstel het resultaat zonder het te verbergen
- 11SamenvattingLees eerst de binding en daarna de waarde
3Bereken een totaal en bouw het bericht op
18 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieBehoud de betekenis van waarden tot tekst
- 2UitlegInspecteer een waarde voordat je die gebruikt
- 3UitdagingVoorspel een veranderend type
- 4KernpuntTrek niet te veel conclusies uit een typelabel
- 5VoorbeeldBereken voordat je opmaakt
- 6UitlegMaak de hele som de teller
- 7UitdagingBepaal het aantal hele meters
- 8TipKies de afronding op basis van de richting
- 9VerbandHoud nauwkeurigheid apart van weergave
- 10UitlegBewaar het resultaat van een transformatie
- 11VoorbeeldLees indexen en een slice
- 12UitdagingSchoon eerst op en controleer daarna
- 13KernpuntWeet of een methode tekst teruggeeft
- 14VoorbeeldVoeg het berekende totaal in
- 15UitdagingKies de benodigde aanhalingstekens
- 16UitlegLaat de expressie een woord kiezen
- 17UitdagingCombineer opschonen en numerieke weergave
- 18SamenvattingInspecteer een bericht van binnen naar buiten
4Accepteer een hoeveelheid zonder ontbrekende invoer te verbergen
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieOnderscheid afwezigheid van een getalswaarde
- 2VoorbeeldInspecteer het ruwe antwoord
- 3UitlegControleer op afwezigheid vóór conversie
- 4VoorbeeldWijs een mislukte conversie af
- 5UitdagingKies een parsefunctie die bij de betekenis past
- 6KernpuntConverteer op truthy of falsy zonder het woord te lezen
- 7VoorbeeldHerken een berekening die tekst verbergt
- 8UitlegEvalueer een keten vanaf links
- 9UitdagingVolg twee verschillende bijwerkingen
- 10TipHerstel de invoer vóór het totaal
- 11UitdagingBehoud nul door het hele traject
- 12SamenvattingValideer in de volgorde waarin informatie beschikbaar komt
5Bouw een beslissing die aan de regels voldoet
15 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieZet een regel om in een voorspelbare beslissing
- 2UitlegHoud typen zichtbaar bij gelijkheid
- 3VoorbeeldVergelijk getallen die als tekst zijn opgeslagen
- 4UitdagingBepaal de werkelijke operanden van een vergelijking
- 5TipControleer op afwezigheid en numerieke nauwkeurigheid
- 6UitlegMaak elke eis expliciet
- 7VoorbeeldGroepeer een gedeelde eis
- 8UitdagingBehoud een lege waarde als die geldig is
- 9KernpuntKortsluitevaluatie bepaalt wat wordt geëvalueerd
- 10VoorbeeldVolg de eerste tak waarvan de voorwaarde waar is
- 11UitdagingKies één waarde of meerdere instructies
- 12UitlegLees switch als een beginpunt
- 13UitdagingVoorspel wat er gebeurt zonder break
- 14UitdagingCombineer conversie met de volgorde van takken
- 15SamenvattingTest de regel op de grenzen
6Zoek en herstel een misleidend totaal
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieZoek waar het resultaat voor het eerst verkeerd wordt
- 2UitlegBepaal het soort fout voordat je code wijzigt
- 3VoorbeeldLees de naam en locatie van de fout
- 4UitdagingOnderscheid ontleden van uitvoeren
- 5TipToon de eerste onverwachte waarde
- 6VoorbeeldReproduceer de verkeerde beslissing
- 7UitlegOnderbreek vóór de vergelijking
- 8KernpuntDe latere conversie kan de optelling niet herstellen
- 9UitdagingInspecteer vóór en na een toewijzing
- 10TipKies de onderbreking die de vraag beantwoordt
- 11UitdagingControleer een typeverbetering via een beslissing
- 12SamenvattingTest de opgeslagen verbetering opnieuw
Variabelen en gegevenstypen in JavaScript: oefenvragen
Set 1: Bouw tekst op en converteer invoer10 Oefenvragen
Vraag 1 van 10
"notes.txt".endsWith(".txt") terug?Toon antwoordVerberg antwoord
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);
Toon antwoordVerberg antwoord
tag moeten opslaan.Vraag 3 van 10
const trays = 4; const massKg = 1.25;, wat levert `Mass: ${(trays * massKg).toFixed(1)} kg` op?Toon antwoordVerberg antwoord
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
const name = "Mira";, welke tekst wordt opgeslagen door const label = "Hello, ${name}";?Toon antwoordVerberg antwoord
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
Number("18px") op?Toon antwoordVerberg antwoord
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
Number(input). Welke waarde ontstaat en welke informatie is verloren gegaan?Toon antwoordVerberg antwoord
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
6 + 2 + "4" op?Toon antwoordVerberg antwoord
"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
shown + 1 op na const shown = (7.5).toFixed(2);?Toon antwoordVerberg antwoord
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
null. Een hoeveelheid moet aanwezig, niet-negatief en numeriek zijn; nul is toegestaan. Welke validatievolgorde voldoet aan alle eisen?Toon antwoordVerberg antwoord
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);
Toon antwoordVerberg antwoord
"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
scripts met daarin start.js. Welk element laadt dat bestand nadat het ontleden van de HTML is voltooid?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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
const rate = 0.15; op en voert daarna rate = 0.2; uit. Wat gebeurt er bij de toewijzing?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);
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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
typeof "28" terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
"catalog".slice(1, 4) terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
ReferenceError: lenght is not defined. Wat moet je eerst inspecteren?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);
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
"16" === 16?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
"24" < "8" tot true?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
0 ?? 5?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
active ? "Ready" : "Waiting" op bij const active = false;?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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
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?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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
const distance = 42; achtereenvolgens de waarden van 0 < distance < 20 en distance > 0 && distance < 20?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
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
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?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
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;
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
base: 13 number, extra: 4 string en total: 134 string. Waar moet de verbetering beginnen?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
raw = "27", fee = 6 en total = "276" direct vóór if (total > 100). Welke wijziging verhelpt de onjuiste indeling als hoog totaal?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
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.
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);
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
Math.floor(-3.2) terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
`Packed ${count} ${count === 1 ? "box" : "boxes"}` op bij const count = 2;?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
const label = "Draft.PDF"; het PDF-einde?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
value. Welke test herkent die waarde correct als NaN?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;
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
count ?? 3 en count || 3 als count gelijk is aan 0, en welke 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";
}
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
if (!value) om ongeldige numerieke invoer af te wijzen. De gebruiker voert "0", "bad" of "-2" in. Wat gaat er mis bij deze controle?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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
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
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
typeof gelijk is aan "number", maar die nooit gelijk is aan zichzelf. Welke waarde is het en hoe test je die rechtstreeks?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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
const cleaned = raw.trim(); en de uitvoering wordt daar onderbroken. Hoe krijg en inspecteer je de geïnitialiseerde waarde van cleaned?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);
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";
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);
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);
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
null, NaN of een getal zijn. Het geldige interval bevat 0 en 10. Welke test accepteert precies de numerieke waarden in dat interval?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
8 + 12 + 36 / 3. Welke diagnose en verbetering passen bij alle aanwijzingen?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
Async-attribuut
async gebruiken wanneer geen ander script ervan afhangt dat de teller eerst wordt uitgevoerd.B
Bewakingsexpressie
typeof total aan Watch toe te voegen, kun je de exacte instructie ontdekken waar een numerieke waarde een string wordt.Binding
const-object wijzigen behoudt de binding omdat de naam nog steeds naar hetzelfde object verwijst.Blokbereik
const message die binnen een if-blok is gedeclareerd, kan na dat blok niet worden gelezen.Booleaanse context
if-test, maar een lege string niet, hoewel beide waarden het type string hebben.Booleaanse waarde
heightM >= 2 geeft een booleaanse waarde terug die kan bepalen of een hoogte aan een eis voldoet.C
CamelCase
firstName en totalMassKg tonen woordgrenzen en blijven tegelijk geldige JavaScript-namen.Commentaar
// vóór een tijdelijke logmelding te zetten, voorkom je dat die wordt uitgevoerd en blijft de tekst beschikbaar voor later.Concatenatie
"Good" + " " + "morning" staat een spatie omdat de middelste string die expliciet levert.Console
6 * 7 in de console van de pagina invoert, verschijnt 42 zonder dat je een instructie aan het opgeslagen script toevoegt.D
Debugger
Declaratie
let result; declareert een variabele voordat latere code beslist welke waarde daarin wordt opgeslagen.Defer-attribuut
defer worden in hun HTML-volgorde uitgevoerd, ook als de tweede download eerder klaar is.Doorvallen naar de volgende case
Drijvendekommaweergave
0.1 + 0.2 kan extra cijfers aan het einde tonen omdat de opgeslagen breuken benaderingen zijn.Dynamische typering
let data = 5; data = "five"; meldt typeof data het type van de nieuwe stringwaarde.E
Een getal aan het begin van tekst uitlezen
parseFloat("6.2 kg") leest 6.2, terwijl Number("6.2 kg") de hele string afwijst met NaN.Else-if-keten
Escapesequentie
\n maakt een regeleinde in tekst, ook als de code op één regel is geschreven.Expliciete typeconversie
input te converteren voordat je een bedrag optelt, maak je duidelijk dat het programma een numeriek totaal verwacht.Expressie
price * count kan een waarde leveren aan een toewijzing of een plaatsaanduiding in een template.Extern script
<script src="js/start.js"></script> koppelt de pagina aan code in een onderliggende map.F
Falsy-waarde
0 slaat if (quantity) over, ook als nul een toegestaan antwoord is in het programma.G
Gegevenstype
9 en "9" worden vergelijkbaar getoond, maar hun typen verklaren waarom er één bij optellen verschillende resultaten geeft.Globaal bereik
let count op het hoogste niveau lezen die door een eerder klassiek script is ingesteld.Grondtal
parseInt("11", 10) lees je decimaal elf, terwijl parseInt("11", 16) decimaal zeventien leest.I
Impliciete conversie naar een getal
"14" - 2 levert 12 op zonder een variabele te veranderen die oorspronkelijk de string bevatte.Impliciete typeconversie
"8" * 2 converteert vermenigvuldiging de tekst impliciet naar een getal voor de berekening en levert 16 op.Index
"planet" bevat index 0 de waarde "p" en index 5 de waarde "t"; index 6 ligt voorbij het einde.Infinity
8 / 0 geeft Infinity terug, dus delen door nul werpt niet altijd een uitzondering op.Initialisatie
const widthM = 4; is het getal 4 de initialisatiewaarde die ervoor zorgt dat de binding kan worden gelezen.Inlinescript
<script>console.log("Hello");</script> kan rechtstreeks vanaf een HTML-pagina een melding tonen.Instructie
let score = 8; console.log(score); wordt de declaratie-instructie vóór de loginstructie uitgevoerd.Interpolatie
name = "Nora" maakt interpolatie in `Hello, ${name}` de begroeting “Hello, Nora”.Invoervalidatie
J
JavaScript-engine
console.log("Ready"); uit en toont de console “Ready”.K
Kortsluitevaluatie
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
&&, zodat een meetwaarde aan beide eisen moet voldoen.Logische fout
Logische NIET
!"0" is false omdat de niet-lege string truthy is voordat de booleaanse waarde wordt omgekeerd.Logische OF
Logpunt
M
Methode
label.toLowerCase() levert tekst in kleine letters op, terwijl je de methode niet aanroept als je de haakjes weglaat.Methoden aaneenschakelen
" Note ".trim().toLowerCase() verwijdert eerst de buitenste spaties en verandert daarna de lettergrootte van het resultaat.Modulescript
<script type="module" src="js/main.js"></script> laden voor de modulecode.N
NaN
"heavy" met Number() converteert, krijg je NaN, wat Number.isNaN() vóór berekeningen kan herkennen.Niet-strikte gelijkheid
"12" == 12 is true na conversie, dus geeft strikte gelijkheid een beter voorspelbare typecontrole.Null
null terug, wat het programma kan controleren voordat het een stringmethode probeert aan te roepen.O
Onderbrekingspunt
Onveranderlijkheid
text = text.trim(); vervangt de waarde van de variabele door een nieuwe string in plaats van de oude te wijzigen.Operatorprioriteit
4 + 6 * 2 wordt vermenigvuldiging vóór optelling uitgevoerd, dus is het resultaat 16 in plaats van 20.Opmaak
(6).toFixed(2) binnen een template gebruikt, verschijnt "6.00" zonder dat de oorspronkelijke numerieke waarde verandert.Overschaduwing
let total = 2 binnen een blok declareert, blijft een afzonderlijke buitenste total ongewijzigd wanneer het blok eindigt.P
Plaatsaanduiding
${...} van een templateliteral waar een expressie wordt geëvalueerd en de tekstvorm ervan wordt ingevoegd.`Mass: ${count * massKg} kg` berekent de plaatsaanduiding het totaal voordat die het invoegt.Postfixincrement
let n = 3; const old = n++; krijgt old de waarde 3, terwijl de bijgewerkte n gelijk wordt aan 4.Primitieve waarde
R
ReferenceError
totl + 5 kan een ReferenceError veroorzaken, ook al bestaat in de buurt een correct gespelde variabele total.Rekenkundige operator
massKg * count gebruikt vermenigvuldiging om de totale massa uit twee numerieke waarden te berekenen.Relationele vergelijking
"30" < "7" is waar als tekstvergelijking, maar als je beide waarden naar getallen converteert, keert het resultaat om.Rest
478 % 100 de 78 cm die na de hele meters overblijft.S
Samengestelde toewijzing
let code = "7"; slaat code += 2 de waarde "72" op omdat samengestelde optelling nog steeds de regel voor het samenvoegen van tekst volgt.Standaardgeval
"normal" toewijzen wanneer de invoer met geen van de genoemde speciale modi overeenkomt.Stap uitvoeren zonder een functie binnen te gaan
Strikte gelijkheid
"12" === 12 is false omdat overeenkomende tekst met cijfers nog steeds een ander type heeft dan een getal.Strikte modus
"use strict"; helpt een verkeerd gespelde variabele bij de eerste toewijzing te ontdekken.String
"203" vormen tekst die je kunt samenvoegen of doorzoeken zonder dat die het getal 203 wordt.Switch-instructie
"4" slaat een numeriek case 4: over, tenzij de invoer vóór de switch-instructie is geconverteerd.Syntaxisfout
T
Tak
else-tak kan verzendkosten toewijzen wanneer de voorwaarde voor gratis verzending als falsy is geëvalueerd.Templateliteral
`Count: ${count}` plaatst het huidige aantal naast het beschrijvende label.Terugval bij null of undefined
count gelijk is aan 0, behoudt count ?? 3 de nul, terwijl count || 3 die vervangt door de terugvalwaarde.Tijdelijke dode zone
let price verhindert dat een eerdere leesbewerking in hetzelfde blok een buitenste variabele price bereikt.Toewijzing
count = count + 1; gebruikt de vorige count om de waarde te berekenen die deze vervangt.Tolerantie
Truthy-waarde
"false" en "0" slagen voor tests op truthy of falsy omdat beide tekens bevatten en niet leeg zijn.TypeError
text.length() behandelt een numerieke eigenschap als een functie, dus veroorzaakt de bewerking een TypeError.U
Uitvoering stap voor stap volgen
Uitvoeringsfout
Unaire plus
+"31" levert het getal 31 op, terwijl "31" + 1 tekst samenvoegt en "311" oplevert.Undefined
let nickname; geeft het lezen van de geïnitialiseerde binding undefined totdat een andere toewijzing plaatsvindt.V
Variabele
distanceKm houdt de gemeten afstand beschikbaar voor latere berekeningen en berichten.Vergelijking
massKg <= 20 omvat precies 20 en kan worden opgeslagen als het booleaanse resultaat van een grenscontrole.Voorwaardelijk onderbrekingspunt
total > 200 slaat gewone kleinere totalen over en onderbreekt wanneer een hoog resultaat moet worden geïnspecteerd.Voorwaardelijke operator
"open" of "closed" kiezen zonder twee afzonderlijke toewijzingstakken te schrijven.W
Wetten van De Morgan
- 1Variabelen en gegevenstypen in JavaScript
- 2Lussen en arrays in JavaScript
- 3JavaScript-functies
- 4JavaScript-objecten en JSON
- 5Document Object Model
- 6JavaScript-events
- 7Asynchrone JavaScript
- 8Gegevens ophalen en browser-API's
- 9Klassen en modules in JavaScript
Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.