30

可能重复:
javascript >>> 运算符?
JavaScript 三倍大于

在这样的代码行中找到了这个运算符:

var t = Object(this),
        len = t.length >>> 0;

这个运算符是什么意思?

完整代码如下。这是JSsome方法的代码:

if (!Array.prototype.some) {
  Array.prototype.some = function(fun /*, thisp */) {
    "use strict";

    if (this == null) throw new TypeError();

    var t = Object(this),
        len = t.length >>> 0;

    if (typeof fun != "function") throw new TypeError();

    var thisp = arguments[1];

    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisp, t[i], i, t))
        return true;
    }

    return false;
  };
}
4

2 回答 2

49

>>>是没有符号扩展的右移

如果>>在负数上使用运算符,结果也将是负数,因为原始符号位被复制到所有新位中。使用>>>零将被复制。

在这种特殊情况下,它只是被用作将length字段限制为无符号 31 位整数的一种方式,或者换句话说,将 Javascript 的本机 IEEE754“双”数“转换”为整数。

于 2012-04-30T10:28:12.050 回答
4

这是一个零填充右移。当您对数字进行位移时,您可以决定用零或符号位填充最左边的位。

在二进制补码表示中,负数以 1 作为前导位,而正数以 0正数。

于 2012-04-30T10:29:36.950 回答