Javascript 为什么Math.floor(Math.random()*n)比Date.now()好%n以在[0,n]之间选择一个随机数?

Javascript 为什么Math.floor(Math.random()*n)比Date.now()好%n以在[0,n]之间选择一个随机数?,javascript,random,Javascript,Random,多年来,我一直在使用Math.floor(Math.random()*someArray.length)来选择数组中的随机元素。我一直想知道为什么它比Date.now()%someArray.length更好。在我看来,后者更不容易出错,而且必须更快(尽管,我还没有对其进行基准测试) 注: 我不需要重复性 这不是在循环中运行的,因此在整个应用程序中随机调用该函数 这不是为了模拟,所以“或多或少”随机就足够了 我一直想知道为什么它比Date.now()好%someArray.length 日期比数

多年来,我一直在使用
Math.floor(Math.random()*someArray.length)
来选择数组中的随机元素。我一直想知道为什么它比
Date.now()%someArray.length
更好。在我看来,后者更不容易出错,而且必须更快(尽管,我还没有对其进行基准测试)

注:

  • 我不需要重复性
  • 这不是在循环中运行的,因此在整个应用程序中随机调用该函数
  • 这不是为了模拟,所以“或多或少”随机就足够了
  • 我一直想知道为什么它比Date.now()好%someArray.length

    日期比数学要复杂得多。random-
    数学。random
    是一种专门为创建随机数而设计的方法,速度要快得多:

    const p0=performance.now();
    常数n=3;
    for(设i=0;i<1e6;i++){
    (Date.now()%3)
    }
    const p1=性能。现在();
    控制台日志(p1-p0)
    我一直想知道为什么它比Date.now()好%someArray.length

    日期比数学要复杂得多。random
    -
    数学。random
    是一种专门为创建随机数而设计的方法,速度要快得多:

    const p0=performance.now();
    常数n=3;
    for(设i=0;i<1e6;i++){
    (Date.now()%3)
    }
    const p1=性能。现在();
    
    控制台日志(p1-p0)一个并不比另一个更好,但是它们是不同的:一个返回伪随机值,另一个不返回。在这个项目中,它可能对你有用,但人类往往很容易概括;在实际需要随机数的代码中使用这一代码是一个巨大的安全漏洞,一个并不比另一个更好,但是它们是不同的:一个返回伪随机值,另一个不返回。在这个项目中,它可能对你有用,但人类往往很容易概括;在真正需要随机数的代码中使用这一点是一个巨大的安全漏洞。请注意,如果“精确随机性”和“安全性”很重要,那么也不要使用Math.random;)请注意,如果“精确随机性”和“安全性”很重要,那么也不要使用Math.random;)