如何" Math.random()* arr.length | 0"用于返回数组

时间:2017-09-14 03:39:04

标签: javascript arrays random

我一直在使用具有某些功能的遗留代码,该代码应返回数组的随机项,我看到以下表达式:

array[Math.random() * arr.length | 0]

我的第一印象是试图找不到the | operator,但我无法弄清楚它是如何工作的。 我在chrome控制台中测试表达式,我发现它始终返回一个有效的索引:

let array = [1,2,3,4]
for(let i = 0; i < 5000; i++){
   console.log(array[Math.random() * arr.length | 0]);
}

如何&#34; Math.random()* arr.length | 0&#34;是否可以返回数组的随机索引?

2 个答案:

答案 0 :(得分:4)

  • Math.random()返回一个数字&gt; = 0和&lt; 1。
  • * arr.length返回一个数字&gt; = 0和&lt; arr.length,但这不能用作索引,因为它会有一个小数部分
  • | 0将左表达式强制转换为整数,然后应用按位或数字零,这始终是另一个数字

这就是说,这项工作的原因是运算符|中的隐式转换(称为coersion)。

答案 1 :(得分:2)

在此上下文中,| 0用于向下舍入到最接近的整数。因此,Math.random生成0 <=数字&lt;的范围内的数字。然后,这将乘以arr.length给出一个介于0&lt; = number&lt; 0之间的数字。 arr.length,然后向下舍入,给出0到arr.length -1之间的整数,包括