gpt4 book ai didi

javascript - JavaScript 中的 `>>>` 运算符是什么?

转载 作者:行者123 更新时间:2023-11-30 20:58:11 25 4
gpt4 key购买 nike

我正在查看 Array.prototype.map 的 polyfill:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

if (!Array.prototype.map) {

Array.prototype.map = function(callback/*, thisArg*/) {

var T, A, k;

if (this == null) {
throw new TypeError('this is null or not defined');
}

// 1. Let O be the result of calling ToObject passing the |this|
// value as the argument.
var O = Object(this);

// 2. Let lenValue be the result of calling the Get internal
// method of O with the argument "length".
// 3. Let len be ToUint32(lenValue).
var len = O.length >>> 0;

// 4. If IsCallable(callback) is false, throw a TypeError exception.
// See: http://es5.github.com/#x9.11
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}

// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (arguments.length > 1) {
T = arguments[1];
}

// 6. Let A be a new array created as if by the expression new Array(len)
// where Array is the standard built-in constructor with that name and
// len is the value of len.
A = new Array(len);

// 7. Let k be 0
k = 0;

// 8. Repeat, while k < len
while (k < len) {

var kValue, mappedValue;

// a. Let Pk be ToString(k).
// This is implicit for LHS operands of the in operator
// b. Let kPresent be the result of calling the HasProperty internal
// method of O with argument Pk.
// This step can be combined with c
// c. If kPresent is true, then
if (k in O) {

// i. Let kValue be the result of calling the Get internal
// method of O with argument Pk.
kValue = O[k];

// ii. Let mappedValue be the result of calling the Call internal
// method of callback with T as the this value and argument
// list containing kValue, k, and O.
mappedValue = callback.call(T, kValue, k, O);

// iii. Call the DefineOwnProperty internal method of A with arguments
// Pk, Property Descriptor
// { Value: mappedValue,
// Writable: true,
// Enumerable: true,
// Configurable: true },
// and false.

// In browsers that support Object.defineProperty, use the following:
// Object.defineProperty(A, k, {
// value: mappedValue,
// writable: true,
// enumerable: true,
// configurable: true
// });

// For best browser support, use the following:
A[k] = mappedValue;
}
// d. Increase k by 1.
k++;
}

// 9. return A
return A;
};
}

最佳答案

它是零填充右移运算符。

根据 Mozilla 的说法,

“This operator shifts the first operand the specified number of bits to the right. Excess bits shifted off to the right are discarded. Zero bits are shifted in from the left. The sign bit becomes 0, so the result is always non-negative.”

来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Unsigned_right_shift

关于javascript - JavaScript 中的 `>>>` 运算符是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com