JavaScript 三重大于

IT技术 javascript
2021-02-04 09:47:21

我在另一个StackOverflow 帖子上看到了这种语法,并且很好奇它的作用:

var len = this.length >>> 0;

是什么>>>暗示?

4个回答

忽略其预期含义,这很可能是您看到它使用的地方:


>>> 0 它的独特之处在于它是唯一将任何类型转换为正整数的运算符:

"string"         >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3]        >>> 0 == 0
Math.PI          >>> 0 == 3

在您的示例中var len = this.length >>> 0,这是一种获取整数长度以用于迭代的方法this,无论类型this.length什么


同样,~~x可用于将任何变量转换为有符号整数。

@K48 我不认为他的意思是iterate,我认为他的意思是说这迫使 length 成为一个数字。(否则,我同样感到困惑。)但这里有一个很好的答案,阐明了更多: stackoverflow.com/questions/1822350/...
2021-03-24 09:47:21
你能解释一下如何使用迭代>>>吗?
2021-03-31 09:47:21

那是一个无符号的右移运算符有趣的是,它是唯一位运算符无符号在JavaScript中。

>>> 运算符将 expression1 的位右移 expression2 中指定的位数。从左边开始填零。丢弃右移的数字。

该运算符是逻辑右移。这里的数字被移动了 0 位。数学上的零位移位应该没有影响。

但在这里它用于将值转换为无符号的 32 位整数。

>>>是一个按位运算符,零填充右移

我认为>>> 0对正数的唯一影响是向下舍入到最接近的整数,与Math.floor(). 我不明白为什么这在您的示例中是必要的,因为通常.length属性(例如 an Array)已经是一个整数。

我还看到了~~以相同方式使用的稍短的~~9.5 == 9; // true.

@AlKepp - 是的,我看到了错误并修复了它 - 应该先进行测试,但这显然是一个快速绘制的问题:)。
2021-03-16 09:47:21
如果你做>>> 0一个负数,它会将其转换为 2 的恭维,然后进行右移。因此-14 >>> 0 == 1073741820( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
2021-04-09 09:47:21
我怀疑它是否与Math.abs()用于负数时相同
2021-04-14 09:47:21