JS génère un booléen aléatoire

Une question simple, mais je suis intéressé par les nuances ici.

Je génère des booléens aléatoires en utilisant la méthode suivante:

const rand = Boolean(Math.round(Math.random())); 

Chaque fois que random() apparaît, il semble y avoir toujours un piège – ce n’est pas vraiment aléatoire, il est compromis par quelque chose ou autre, etc. Donc, j’aimerais savoir:

a) La méthode ci-dessus est-elle la meilleure façon de le faire?

b) Est-ce que je pense à des choses?

c) Suis-je en train de penser à des choses?

d) Y a-t-il une meilleure / plus rapide / plus élégante façon dont je ne suis pas au courant?

(Aussi quelque peu intéressé si B et C s’excluent mutuellement.)

Mettre à jour

Si cela fait une différence, je l’utilise pour déplacer un personnage IA.

Techniquement, le code a l’air bien, mais juste un peu trop complexe. Vous pouvez comparer “Math.random ()” à “0.5” directement, car la plage de Math.random () est [0, 1]. Vous pouvez diviser la plage en [0, 0.5) et [0.5, 1).

 var random_boolean = Math.random() >= 0.5; 

Si votre projet a lodash vous pouvez:

 _.sample([true, false]) 

Pour une valeur plus sécurisée sur le plan cryptographique, vous pouvez utiliser crypto.getRandomValues dans les navigateurs modernes.

Échantillon:

 var randomBool = (function() { var a = new Uint8Array(1); return function() { crypto.getRandomValues(a); return a[0] > 127; }; })(); var trues = 0; var falses = 0; for (var i = 0; i < 255; i++) { if (randomBool()) { trues++; } else { falses++; } } document.body.innerText = 'true: ' + trues + ', false: ' + falses; 

Celui-ci, ça va?

 return Math.round((Math.random() * 1) + 0) === 0;