Per generare numeri casuali in javascript si usa il metodo .random() dell’oggetto Math, che contiene delle costanti matematiche come, ad esempio, la Costante di Eulero il PI e alcune comuni funzioni matematiche come, la radice quadrata o l’elevamento a potenza.

Generare numeri casuali con Math.random()

Il metodo .random() restituisce un numero casuale compreso tra 0 e 1.

<script>
 document.write("<p>" + Math.random()+ "</p>");
</script>

Altri metodi dello stesso oggetto possono essere usati per controllare il valore restituito da .random().

Se si vuole generare dei numeri casuali all’interno di un preciso intervallo è sufficiente moltiplicare il valore restituito da Math.random() per l’estremo superiore dell’intervallo.

document.write(Math.random() * 10);

L’istruzione precedente genera un numero compreso tra 0 e 10 come mostrato dall’immagine seguente.

Generare numeri casuali con Math.random()

Generare numeri casuali con Math.random()

Per evitare che venga generato lo zero aggiungere 1.

document.write(Math.random() * 10 + 1);

Il metodo Math.Floor() consente di arrotondare il valore a un numero intero.

document.write(Math.floor(Math.random() * 10) + 1);

Il metodo Math.floor() restituisce l’intero più grande che non sia superiore al numero passato come argomento (ad esempio, con 7.9 il metodo floor() restituirà 7).

Per generare numeri casuali interi compresi tra 1 e 90 modificare lo script come nel seguente esempio.

document.write(Math.floor((Math.random() * 90) +1));

Generare sequenze di numeri casuali

Per stampare una sequenza di numeri casuali si può utilizzare un ciclo.

for(var i=0; i<10; i++){
 document.write("<p>" + Math.floor((Math.random() * 90) + 1) + "</p>");
}

Generare una sequenza di numeri casuali senza duplicati è più complesso.

Nell’esempio successivo i numeri generati vengono memorizzati in un array javascript. Prima di inserire il nuovo numero generato nell’array lo script controlla che non sia presente, con il metodo .indexOf(), e in tal caso lo aggiunge.

<script>
var numeri= new Array();
var i=0;
while( i<10){
 var n = Math.floor((Math.random() * 90) +1);
 var r = numeri.indexOf(n);
 if(r<0){
 numeri.push(n);
 i++; 
 } 
}
document.write(numeri);
</script>

Il metodo .indexOf() restituisce la posizione dell’elemento che corrisponde a quello passato come argomento. Se l’elemento indicato come argomento non è presente nell’array viene restituito il valore -1.

Altre informazioni sull’oggetto Math sono disponibili nella specifica pubblicata da ecma-international.