JavaScript:如何解释'Math.floor(Math.random)`方法的变体?

JavaScript:如何解释'Math.floor(Math.random)`方法的变体?,javascript,math,random,integer,Javascript,Math,Random,Integer,似乎Math.random()*3 | 0等同于Math.floor(Math.random()*3),这是我熟悉的版本。虽然我可以一步一步地理解后者如何生成整数0、1和2,但前者的结构让我感到困惑。它很可能是更迂回的Math.floor方法的惯用变体 是否可以用x | y样式表达以下两段代码,并产生相同的结果?如果是的话,你能详细说明它是如何工作的吗 |是位OR运算符。它在每个位位置返回一个1,其中一个或两个操作数的对应位为1 您可以轻松地将方法更改为以下内容: 1 + Math.rando

似乎
Math.random()*3 | 0
等同于
Math.floor(Math.random()*3)
,这是我熟悉的版本。虽然我可以一步一步地理解后者如何生成整数0、1和2,但前者的结构让我感到困惑。它很可能是更迂回的
Math.floor
方法的惯用变体

是否可以用
x | y
样式表达以下两段代码,并产生相同的结果?如果是的话,你能详细说明它是如何工作的吗



|是位OR运算符。它在每个位位置返回一个1,其中一个或两个操作数的对应位为1

您可以轻松地将方法更改为以下内容:

1 + Math.random()*100|0

190 + Math.random()*66|0

根据EMCAScript规范,当一个位运算符应用于一个数字时,它会被转换为一个Int32值。这可以解释这种行为。 链接:

“生产A:A@B,其中@是上述生产中的一个位运算符,其计算如下:

设lref为计算A的结果。 设lval为GetValue(lref)。 设rref为评估B的结果。 设rval为GetValue(rref)。 让lnum为32(左心室)。 让rnum为32(rval)。
返回将按位运算符@应用于lnum和rnum的结果。结果是一个有符号的32位整数。“

|是javascript中的按位Or运算符。 按位Or运算符在每个位位置返回一个1,其中一个或两个操作数的对应位为1。 对于任何x,x | 0都是x

按位运算符仅适用于整数,因此javascript将浮点转换为整数。 因此,1.5 | 0变为1

您的表达式可以重写为

1 + (Math.random() * 100 | 0)

190 + (Math.random() * 66 | 0)

num | 0
Math.floor(num)
1 + (Math.random() * 100 | 0)

190 + (Math.random() * 66 | 0)