mi son documentato meglio e mi ricorreggo stavo prendendo un granchio

Math.random() genera un numero casuale da 0 (incluso) a 1 (escluso), per cui lo script proposto da ninja72 è ok, non genera errori.
Questa parte:
codice:
Math.floor(Math.random() * 16).toString(16)
è perfettamente valida per ottenere un valore esadecimale da 0 a F.

Mentre nello script postato da Gas75, sarebbe meglio correggere quel 255 sostituendolo con il più appropriato 256 (cioè 16 alla seconda), così:
codice:
let casuale = Math.floor(Math.random()*256);
questo infatti genera un valore tra 0 e 255 che, convertito in esadecimale, restituisce un valore tra 0 e FF.

Le indicazioni che ho postato prima restano comunque valide riguardo il problema in oggetto.

buon proseguimento