Javascript 为什么'number |=0'转换为32位整数?

Javascript 为什么'number |=0'转换为32位整数?,javascript,Javascript,我发现了以下代码: hash = hash | 0; // Convert to 32bit integer 有人能解释一下为什么这段代码将哈希值转换成32位整数吗?这是因为|是位运算符。所以 hash = hash | 0; 执行按位或操作,即哈希和零的按位或 您还将观察到其他按位运算符的类似行为,例如: var x=4; console.log(4>>1);//右移位运算符原因是位运算符在应用运算符之前会将其参数隐式转换为32位整数。除此之外,|0执行按位或with0,这本质上是一个n

我发现了以下代码:

hash = hash | 0; // Convert to 32bit integer

有人能解释一下为什么这段代码将哈希值转换成32位整数吗?

这是因为
|
是位运算符。所以

hash = hash | 0;
执行按位
操作,即哈希和零的按位

您还将观察到其他按位运算符的类似行为,例如:

var x=4;

console.log(4>>1);//右移位运算符
原因是位运算符在应用运算符之前会将其参数隐式转换为32位整数。除此之外,
|0
执行按位或with
0
,这本质上是一个no-op

在ES6规范中,
|
操作符是,然后是

特别是,步骤7和9将参数强制转换为32位整数,步骤11将结果返回为32位整数:

产生式A:A@B,其中@是 上述产品的评估如下:

  • 设lref为计算A的结果
  • 让lval成为(lref)
  • (利瓦尔)
  • 设rref为评估B的结果
  • 设rval为(rref)
  • (rval)
  • 让lnum成为(lval)。
  • (lnum)
  • 让rnum为(rval)。
  • (rnum)
  • 返回将按位运算符@应用于lnum和rnum的结果结果是一个有符号的32位整数。
  • [重点补充]


    谢谢,我知道,假设我们有1111111111111111111111111111111111111111111111111111111111111和零,其中所有位都是
    0
    。如果我们这样做,我们将得到5个字节。@Jim2018 Bitwize操作在JS中,只有32位有符号整数。@Keith如果这是真的,那么这是关键点,应该添加到答案中。@Jim2018是的,我确实认为答案会从中受益。如果amrender也愿意的话,我会把这个留给他更新答案。@Keith谢谢你提供的额外信息。请随时更新我的答案,谢谢更常见的提示:它通过转换为无符号32位整数来确保结果为正。