似乎 Math.random()*3|0
等于 Math.floor(Math.random() * 3)
,这是我的版本我熟悉。虽然我可以毫无问题地理解后者如何生成整数 0、1 和 2 的逐步过程,但前者的结构却难倒了我。它很可能是更迂回的 Math.floor
方法的惯用变体。
是否可以用 x|y
样式表达以下两段代码并产生相同的结果?如果是这样,你能分解一下它是如何工作的吗?
1 + Math.floor(Math.random() * 100) // yielding 1-100 (inclusive)
190 + Math.floor(Math.random() * 66) // yielding 190-255 (inclusive)
最佳答案
|是 JavaScript 中的按位或运算符。 按位或运算符在每个位位置返回 1,其中任一操作数或两个操作数的相应位均为 1。 x| 0 是 x,对于任何 x
按位运算符仅适用于整数,因此 javascript 将 float 转换为整数。 因此 1.5 | 0 变成 1。
你的表达式可以重写为
1 + (Math.random() * 100 | 0)
190 + (Math.random() * 66 | 0)
关于JavaScript:如何解释 `Math.floor(Math.random)` 方法的变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336488/