繁体   English   中英

Math.random()* i |是什么? 0是什么意思?

[英]What does Math.random() * i | 0 mean?

var lst = [/*List of items*/];
for (var i = 10; i > 0; i--) {
    lst.appendChild(lst[Math.random() * i | 0]);
}

为什么会“ |” 在索引中? 此功能是否会打乱列表“ lst”?

按位或运算符 | 将其输入转换为32位二补数。 通常用于快速舍入为零(比Math.trunc()更快):

 console.log(1.1 | 0); // 1 console.log(1.9 | 0); // 1 console.log(-1.1 | 0); // -1 console.log(-1.9 | 0); // -1 

表达式Math.random() * i | 0 因此Math.random() * i | 0等于Math.trunc(Math.random() * i)并返回从0到i-1范围内的伪随机整数。

PS:双重按位取反~~具有相同的效果。 请记住,应用按位运算符可以有效地减少整数操作数的范围,从Number.MAX_SAFE_INTEGER(2⁵³-1)到最大32位二补码(2³¹-1)。

Math.random()为您提供范围[0, 1)随机浮点。 在循环中将其乘以i可得到怪异的值。 | 0 | 0给出值的整数部分。 Math.floor(Math.random()*n)返回范围为[0, n)随机整数,这似乎适用。

Node.appendChild()方法将一个节点添加到指定父节点的子节点列表的末尾。

如果给定的子项是对文档中现有节点的引用,则appendChild()将其从其当前位置移至新位置

因此,您只需重新排列前10个节点,即可在列表末尾随机放置一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM