Что делает х >>> 0?

Возможный дубликат:
Что хорошего делает бит-сдвиг нулевого заполнения на 0? ( → → 0)

Я изучил некоторые концепции функционального программирования в моем проекте, и я читал о Array.prototype.map, который является новым в ES5 и выглядит следующим образом:

Array.prototype.map = function(fun) {
    "use strict";
    if (this === void 0 || this === null) {
        throw new TypeError();
    }
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function") {
        throw new TypeError();
    }
    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
        if (i in t) {
            res[i] = fun.call(thisp, t[i], i, t);
        }
    }
    return res;
};

Мне интересно, почему он делает t.length >>> 0. Потому что это ничего не делает. x >>> 0 //-> x! (пока х - число, очевидно)

Также обратите внимание, что я не знаю, как работают побитовые операторы.

Ответы

Ответ 1

x >>> 0 выполняет логическое (без знака) смещение вправо 0 бит, что эквивалентно no-op. Однако перед правым сдвигом он должен преобразовать x в 32-битное целое без знака. Таким образом, общий эффект x >>> 0 преобразует x в 32-разрядное целое без знака.

Это гарантирует, что len является неотрицательным числом.

js> 9 >>> 0
9
js> "9" >>> 0
9
js> "95hi" >>> 0
0
js> 3.6 >>> 0
3
js> true >>> 0
1
js> (-4) >>> 0
4294967292