Als je in JavaScript een array aanmaakt, dan hoef je daarvoor niet de constructor aan te roepen met het
new keyword. De geprefereerde manier is om een zogenaamde
array literal te gebruiken, waarmee je creatie en initialisatie inéén vouwt.
Arrays beschikken daarnaast over een methode
push om nieuwe items achter op het array aan te schuiven. Je hoeft dus niet zelf een index bij te houden en elke keer op te hogen. Dat is nergens goed voor.
JavaScript heeft verder ook gewoon een boolean type, dus je hoeft niet met nummers te werken en vervolgens te gaan annoteren waar deze voor staan. Gebruik bijvoorbeeld in dit programma een boolean variable met de naam
isPrime (en niet een nietszeggende naam zoals
r) en alles is meteen duidelijk.
Als je dure berekeningen zoals worteltrekking gaat doen in de conditie van de lus, is het altijd slim om even te kijken of ze enkel afhankelijk zijn van waardes die tijdens de lus constant blijven. Zo ja; til dan de berekening buiten de conditie en gebruik in de conditie enkel de al berekende waarde. Dan hoeft die hele berekening niet elke iteratie van de lus opnieuw gedaan te worden en wordt je programma een stukje sneller.
Wat betreft schermuitvoer: het is het beste om
document.write en varianten zoals
document.writeln meteen af te leren. Deze vernietigen je huidig ingeladen pagina en hebben een negatieve invloed op de manier hoe browsers het inladen van scripts rangschikken, waardoor laadtijd uiteindelijk langer wordt. Als je persé uitvoer wilt opzetten die in het document terug verschijnt, maak dan een DOM element daarvoor aan en schrijf tekst daar naar toe.
Je huidige programma zou er dan bijvoorbeeld zo uit kunnen komen te zien:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <!DOCTYPE html>
<html>
<head>
<script>
function main() {
var
buffer = [ 2 ],
p = 1000,
isPrime,
n,
m,
i;
for( n = 3 ; n <= p ; n += 2 ) {
isPrime = true;
for( i = 0, m = Math.sqrt( n ) ; i <= m ; ++i ) {
if ( n % buffer[ i ] === 0 ) {
isPrime = false;
break;
}
}
if ( isPrime ) {
buffer.push( n );
}
}
document.body
.appendChild( document.createElement( "pre" ))
.appendChild( document.createTextNode( buffer.join( "\n" )));
}
</script>
</head>
<body>
<button onclick="main()">Show primenumbers</button>
</body>
</html> |