Werken met getallen
De taal JavaScript is helemaal gericht op het werken met strings, zeg maar met series karakters. Zodra daar mee gerekend
moet gaan worden kunnen er problemen ontstaan. Cijfers moeten de ene keer als getal worden behandeld, de andere keer zijn
cijfers onderdeel van een tekst en verschillen ze niet wezenlijk van a, b of c.
Daarnaast is de noodzaak om wiskundige functies met getallen te gebruiken, zoals sinus, logaritme, enz. En wat te doen als
een berekening fout gaat?
Hier vind je een beknopte beschrijving van de JavaScript-aanpak.
- Er worden twee items besproken:
- Het ophalen van getallen uit een tekst-veld. Hierbij wordt ook het object Number kort besproken.
- Het afhandelen van uitzonderingen.
- Er wordt iets gezegd over zogenoemde "reserved words". Dit zijn woorden die binnen JavaScript een bepaalde betekenis hebben en dus niet als variabele kunnen optreden.
- Vervolgens wordt een hyperlink gegeven naar de vele rekenkundige en logische operatoren die er in JavaScript zijn.
- Tenslotte wordt een beknopt overzicht gegeven van de mogelijkheden van de bibliotheek Math, die standaard
in JavaScript aanwezig is.
Gegevens ophalen uit een tekst-veld
Een tekst-veld is doorgaans onderdeel van een formulier. Een eenvoudig voorbeeld is de volgende code:
<form name="Demo">Merk op dat de <form>-tag geen action= en method= attributen heeft. Die zijn voor een "lokaal" formulier niet nodig.
Type hier wat ==>
<input type="text" name="Voorbeeld" value="Letters, cijfers, enz."
size="20">
<input type="button" name="DoeHet" value="Tonen"
onClick="DemoActie()">
</form>
Als je op de knop "Tonen" drukt, wordt een JavaScript-function met de naam DemoAction() aangeroepen. Het enige wat die function doet is een alert op het scherm zetten:
<script>
function DemoActie() {
window.alert('Ingetypte tekst is: '+document.Demo.Voorbeeld.value);
}
</script>
De alert geeft de string weer: Naam van de <form>.Naam van de <input>.value. In dit geval is dat
document.Demo.Voorbeeld.value. Hiermee heb je de inhoud van het tekstveld tot je beschikking en kun er mee aan de
slag.
Hieronder kun je het uitproberen.
Strings omzetten in getallen
Zoals hierboven als is opgemerkt is JavaScript string-georiënteerd. Als je met getallen aan het werk moet kun je tegen situaties aanlopen waarbij een speciale ingreep noodzakelijk is. Een voorbeeld is het opgeven van een bestelling ("Doet U mij maar 5 van die rollen stippeltjesbehang"). Je moet dan zeker zijn dat er alleen cijfers worden ingegeven en geen letters.
- Voor de weergave van getallen is er het object Number. Hiermee kun je testen of getallen aan bepaalde criteria voldoen.
- Je maakt een "getal" met behulp van: new Number(waarde). Op de plaats van waarde kun je gelijk wat ingeven, bijvoorbeeld var a = new Number(123).
- Om een "getal" om te zetten naar een string gebruik je de methode Number.toString(waarde), bijvoorbeeld var b = a.toString(). De parameter waarde geeft het talstelsel aan: 2 is binair, 8 is octaal, 10 is decimaal, 16 is hexadeximaal; default is 10. 2 ≤ waarde ≤ 36.
- Om een getal om te zetten van string naar een integer (geheel) getal gebruik je de functie parseInt(string). Hierdoor wordt een "string-type" variabele overgezet naar een object van het type Number.
- Om een getal om te zetten van string naar een float (gebroken) getal gebruik je de functie parseFloat(string). Hierdoor wordt een "string-type" variabele overgezet naar een object van het type Number.
- De functies parseInt en parseFloat zijn globale functies in JavaScript. Ze zijn dus altijd beschikbaar. Ze geven een speciale code terug als de conversie fout gaat: NaN (Not a Number). Je kunt op NaN testen met de functie isNaN(waarde).
- Een andere globale functie die iets met getallen heeft te maken is isFinite(waarde). Hiermee kun je testen of een getal eindig is. Hierbij hoort de code Infinity, waarin wordt bijgehouden wordt of een getal oneindig is of niet.
- Daarnaast is er nog de functie eval(code). Hiermee laat je code eerst uitwerken alvorens deze te gebruiken.
Voorbeeld: De codedocument.write('3+4')
toont op het scherm: 3+4,
terwijl de code:document.write(eval('3+4'))
resulteert in: 7. - Het gebruik van eval() beperkt zich niet tot getallen. Je kunt ook JavaScript-code in een string zetten en die vervolgens met eval() laten uitvoeren.
Naast het hierboven genoemde heeft het object Number nog de volgende constanten beschikbaar:
Number.MAX_VALUE | Grootst mogelijke numerieke waarde | |
Number.MIN_VALUE | Kleinst mogelijke numerieke waarde | |
Number.NEGATIVE_INFINITY | - oneindig | |
Number.POSITIVE_INFINITY | + oneindig |
"Reserved words"
Je kunt in JavaScript niet zomaar elke naam gebruiken als naam voor een variabele of function. JavaScript kent een aantal
namen die gereserveerd zijn voor de taal zelf. Zo kun je var niet inzetten als naam voor een variabele of function.
Zie het item Reserved words in JavaScript voor een redelijk compleet
overzicht.
Rekenkundige en logische operatoren
De site www.w3schools.com geeft een "strikte"
opsomming van bestaande operatoren. Hierbij zitten dus ook zaken als () en delete. Feitelijk voeren die geen
bewerking uit op data. maar starten die een programma-actie.
De verwerkingsrichting van een JavaScript opdracht is niet noodzakelijk van Rechts naar Links. Bewerkingen met dezelfde prioriteit
worden van Links naar Rechts uitgevoerd.
De verwerkingsprioriteit ("Meneer Van Dalen Wacht Op Antwoord") staat erbij. Hoe hoger de prioriteit is,
hoe eerder een bewerking wordt uitgevoerd bij de uitwerking van de hele opdracht.
Op het moment dat dit wordt geschreven (mei 2024) kent JavaScript 18 opeenvolgende prioriteiten, waarvan 18 de hoogste
en 1 de laagste is. Voor een uitgebreide beschrijving van deze dingen verwijs ik naar bovengenoemde pagina op w3schools.com.
De bibliotheek Math
JavaScript bevat een standaard-object met de naam Math, waarmee een aantal wiskundige functies en constanten beschikbaar wordt gesteld. Math bevat alleen statische functies en gedraagt zich daardoor als een "gewone" functie-bibliotheek.
Beschikbare constanten zijn:
Constante | Betekenis |
---|---|
E | Constante van Euler (e = 2.7182818...) |
LN10 | Natuurlijk logaritme van 10 (= 2.3025...) |
LN2 | Natuurlijk logaritme van 2 (= 0.6931...) |
LOG10E | Logaritme van e, gebaseerd op grondtal 10 (= 0.4342...) |
LOG2E | Logaritme van e, gebaseerd op grondtal 2 (= 1.4426...) |
PI | Cirkelgetal, pi = 3.1415... |
SQRT1_2 | Vierkantswortel van ½ (= 0.7071...) |
SQRT2 | Vierkantswortel van 2 (= 1.4142...) |
Beschikbare functies (methodes) zijn:
Functie | Doel |
---|---|
abs(x) | Absolute waarde van x: Waarde zonder minteken |
sign(x) | Teken van x: 1 voor positief, 0 voor nul, -1 voor negatief |
trunc(x) | Integer deel van x: Deel van x zonder decimalen |
clz32(x) | Geeft het aantal voorloopnullen in de 32-bits representatie van een geheel, niet negatief getal x Een negatief getal geeft altijd nul |
round(x) | "Gewone" afronding naar dichtstbijzijnde gehele getal Math.round(1.4) = 1; Math.round(1.5) = 2 |
fround(x) | Afronding naar dichtstbijzijnde 32-bits representatie van een floating point getal |
ceil(x) | Afronding naar boven. Math.ceil(1.1) = 2 |
floor(x) | Afronding naar beneden. Math.floor(1.9) = 1 |
max(x1, … , xn) | Bepaal de grootste van waarden x1, … , xn |
min(x1, … , xn) | Bepaal de kleinste van waarden x1, … , xn |
log(x) | Natuurlijk logaritme van x, dus gebaseerd op het grondtal e |
log1p(x) | Natuurlijk logaritme van 1 + x |
log2(x) | Logaritme van x, gebaseerd op het grondtal 2 |
log10(x) | Logaritme van x gebaseerd op het grondtal 10 |
exp(x) | Berekent ex |
expm1(x) | Berekent ex - 1. Dit is nauwkeuriger dan exp(x) - 1 |
random() | Geeft een pseudo-willekeurig getal y, 0 ≤ y < 1 |
sin(x) | Bepaal de sinus van de hoek x, x in radialen |
cos(x) | Bepaal de cosinus van de hoek x, x in radialen |
tan(x) | Bepaal de tangens van de hoek x, x in radialen |
asin(x) | Bepaal de arcsinus van x (radialen) |
acos(x) | Bepaal de arccosinus van x (radialen) |
atan(x) | Bepaal de arctangens van x (radialen) |
atan2(x,y) | Bepaal de arctangens van x / y (radialen) |
sinh(x) | Bepaal de sinus hyperbolicus van x |
cosh(x) | Bepaal de cosinus hyperbolicus van x |
tanh(x) | Bepaal de tangens hyperbolicus van x |
asinh(x) | Bepaal de arcsinus hyperbolicus van x |
acosh(x) | Bepaal de arccosinus hyperbolicus van x |
atanh(x) | Bepaal de arctangens hyperbolicus van x |
pow(x,y) | Bepaal xy |
sqrt(x) | Bepaal de vierkantswortel van x |
cbrt(x) | Bepaal de derdemachtswortel van x |
Gebruik van Math
De code om bv. de constante van Euler e (= 2.7182818...) te gebruiken is:
y = Math.E;
De function Math.random() gebruik je het beste in combinatie met Math.ceil() of Math.floor():
Voor een random getal y in de reeks van 0 tot en met 999 gebruik je:
y = Math.floor(Math.random()*1000)
Voor een random getal z in de reeks van 1 tot en met 10 gebruik je:
z = Math.ceil(Math.random()*10)
De code om bijv. de sinus van een getal x te bepalen is:
y = Math.sin(x);
De trigionometrische functies (sin, cos, tan) werken met radialen, niet met graden. De inverse functies (asin, acts, atan)
geven radialen terug.
X graden omrekenen naar Y radialen doe je met: Y = X * Math.PI / 180
X radialen omrekenen naar Y graden doe je met: Y = X / Math.PI * 180