【问题标题】:In Javascript, what's the point of "offset >>>= 0" assignment? [duplicate]在 Javascript 中,“offset >>>= 0”赋值的意义何在? [复制]
【发布时间】:2015-06-27 02:07:03
【问题描述】:

>>>= 是 Javascript 中的无符号右移运算符: Reference

In this code 看到作者用的是这段代码:

if (typeof offset !== 'number' || offset % 1 !== 0)
  throw TypeError("Illegal offset: "+offset+" (not an integer)");
offset >>>= 0;
if (offset < 0 || offset + 0 > this.buffer.byteLength)
  throw RangeError("Illegal offset: 0 <= "+offset+" (+"+0+") <= "+this.buffer.byteLength);

我想知道使用 >>>= 的意义何在,以及我是否可以完全跳过它。代码似乎只有在偏移量为负的情况下才有效,而且我不太清楚该操作的目的。

【问题讨论】:

  • 可能不是重复的,但它包含部分答案:">>> 0 是唯一的,因为它是将任何类型转换为正整数的唯一运算符:" - 但为什么转换它然后检查它是否为负?我会像你说的那样删除那条线。

标签: javascript


【解决方案1】:

将值移零步长的唯一目的是强制转换为 32 位整数并返回。

由于之前的语句检查它是一个数字并且该数字没有小数部分,因此它在该代码中没有任何用途。

对于负值,它会将其转换为该值的无符号二进制补码,例如从-14294967295。因为无论如何这超出了缓冲区的大小,它会被下一条语句中的检查捕获。

如果你保持轮班,那么你不需要在下一个语句中检查offset &lt; 0,因为这永远不会发生。

【讨论】:

  • 很好的解释,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多