Sådan virker Math.random()
Math.random() er en af de mest brugte metoder i JavaScript, når man vil generere tilfældige værdier. Den er nem at bruge og kan bruges til alt fra små interaktive funktioner til mere avancerede spil og simuleringer.

Hvad er Math.random(), og hvordan virker det?
Math.random() er en indbygget metode i JavaScript, der returnerer et decimaltal mellem 0 (inklusive) og 1 (eksklusive). Det betyder, at værdien altid er større end eller lig med 0, men aldrig præcis 1. Det gør metoden velegnet som grundlag for forskellige former for tilfældighed.
Bag kulissen bruges en pseudo-tilfældighedsgenerator (PRNG). Det betyder, at tallene ikke er helt tilfældige i matematisk forstand, men beregnes af algoritmer. Til de fleste praktiske formål — som spil, lodtrækninger eller tilfældige farver — er Math.random() god nok. Til avanceret kryptografi eller sikkerhed er den dog ikke stærk nok.
Eksempler på brug af Math.random()
Et simpelt eksempel er at generere et tilfældigt tal mellem 0 og 9. Det gør man ved at gange resultatet fra Math.random() med 10 og runde ned:
const number = Math.floor(Math.random() * 10)
På samme måde kan du justere intervallet ved at gange med andre tal og lægge en forskydning til. Hvis du for eksempel vil have et tal mellem 5 og 15, kan du skrive:
const number = Math.floor(Math.random() * 11) + 5
Med samme princip kan du generere alt fra heltal til decimaltal, vælge tilfældige elementer fra en liste og skabe variation i farver, positioner og bevægelser i en webapplikation.
Forenkling med en hjælpefunktion
For at gøre koden renere og nemmere at genbruge kan du lave en funktion i JavaScript, der tager et array med værdier og returnerer en af dem tilfældigt.
const random = (array) => array[Math.floor(Math.random() * array.length)]
const result = random(['Ja', 'Nej'])
result vil under kørsel enten være Ja eller Nej og kan vises til brugeren på den måde, du ønsker.
Typiske anvendelser af Math.random()
Math.random() bruges ofte i små projekter, hvor der er behov for variation. Et klassisk eksempel er tilfældige baggrundsfarver eller at lade et program vælge et tilfældigt citat fra en liste.
I spiludvikling bruges metoden blandt andet til startpositioner, forhindringer, loot og tilfældige hændelser. I simuleringer kan den bruges til at efterligne usikkerhed eller naturlig variation. Metoden er også nyttig til testdata, når du vil have forskellige værdier hver gang programmet kører.
Det er dog vigtigt at huske, at tilfældigheden ikke er "ægte". Da værdierne er algoritmebaserede, kan de i princippet forudsiges, hvis generatorens tilstand er kendt. For spil og simple applikationer er det sjældent et problem, men til sikkerhedskritiske funktioner bør du bruge kryptografisk tilfældighed.
Fordele og begrænsninger ved Math.random()
En stor fordel ved Math.random() er enkelheden — ét funktionskald giver dig en ny tilfældig værdi. Metoden er også en standarddel af JavaScript og virker i alle moderne browsere uden ekstra biblioteker.
En begrænsning er, at den ikke er egnet til situationer, hvor man har brug for reelt sikre tilfældige tal. Til sikkerhedskritiske formål, som generering af adgangskoder eller nøgler, anbefales det indbyggede Web Crypto API (f.eks. crypto.getRandomValues()).
For langt de fleste brugsscenarier er Math.random() stadig mere end tilstrækkelig. Den giver udviklere en hurtig og fleksibel måde at skabe variation og uforudsigelighed i programmer på.
Hvordan Slumpgenerator gik fra Math.random() til crypto.getRandomValues()
Slumpgenerator blev oprindeligt bygget med Math.random() til alle sine generatorer. Selvom det fungerer fint i praksis, er det ikke kryptografisk sikkert — værdierne kan i teorien forudsiges, hvis den interne PRNG-tilstand er kendt.
Siden da har vi flyttet al tilfældighedsgenerering på Slumpgenerator til Web Crypto API's crypto.getRandomValues(), som bruger entropi fra operativsystemet og er langt sværere at forudsige. Læs mere om hvordan crypto.getRandomValues() virker.
Læs mere om metoden på Mozillas hjemmeside MDN.
Oversættelser
- Dansk: Sådan virker Math.random()
- Deutsch: So funktioniert Math.random()
- English: How Math.random() Works
- Suomi: Näin Math.random() toimii
- Svenska: Så fungerar Math.random()