Что делает х >>> 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