我只是在浏览Mozilla开发者文档,发现表示我不知道用于什么,也无法通过互联网找到任何信息。“>>>”运算符 - 用于什么?
Array filter polyfill - line 10
var t = Object(this);
var len = t.length >>> 0;
任何建议,这是什么运营商是?
我只是在浏览Mozilla开发者文档,发现表示我不知道用于什么,也无法通过互联网找到任何信息。“>>>”运算符 - 用于什么?
Array filter polyfill - line 10
var t = Object(this);
var len = t.length >>> 0;
任何建议,这是什么运营商是?
TL; DR
t.length >>> 0;
实际上是尝试从t.length
获得一个有效的32位无符号整数。我们知道,t.length
可以是任何类型(对象,数组,字符串等)。如果它已经是一个有效的32位无符号数,则>>> 0
返回值不变。例如,
console.log({} >>> 0);
// 0
console.log([] >>> 0);
// 0
console.log("Google" >>> 0);
// 0
通常情况下,按位伎俩来避免if
块类型检查,这样
var len = 0;
if (typeof data === 'number') {
len = data;
}
我们可能还是要len
转换为整数,如果它是浮动点值。
说明
>>>
被称为填零右移位运算符。除用作位运算符外,还用于从对象中获取32位数值。该ECMA Script 5.1 Specification for >>>
说
- 让LREF是评估ShiftExpression的结果。
- 让lval成为GetValue(lref)。
- 让rref是评估结果添加剂表达。
- 让rval成为GetValue(rref)。
- 让lnum是ToUint32(lval)。
- 让rnum是ToUint32(rval)。
- 让shiftCount转换是屏蔽掉所有的结果,但RNUM的至少显著5位,也就是计算RNUM & 0x1F的。
- 返回执行零填充右移的结果lnumshiftCount位。空位填充零。 结果是一个无符号的32位整数。
它基本上转换两个操作数以32位无符号整数(步骤5和6)和转移的左手侧表达,右手侧表达倍。
如果我们看一下definition of ToInt32
,
- 让数是调用ToNumber对输入参数的结果。
- 如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。
- 让POSINT是符号(数)*地板(ABS(数))。
- 让int32bit是POSINT模2 ;即,有限整数值数字类型的ķ用正号和小于2 在幅度使得POSINT和ķ数学差是数学上的2 的整数倍。
- 返回int32bit。
首先参数被转换为一个数字(如果它是一个不是有效的数字然后NaN
将由ToNumber
被返回)。第4步确保您返回的范围为0到2的有效数字。
这是一个"Zero-fill right shift"(按位)运算符。
该运算符将第一个操作数向右移动指定的位数。向右移位的过多位被丢弃。零位从左侧移入。符号位变成
0
,所以结果总是非负的。对于非负数,零填充右移和符号传播右移产生相同的结果。例如,
9 >>> 2
收益率为2
,与9 >> 2
相同:但是,负数不是这种情况。例如,
-9 >>> 2
1073741821
产生,这比-9 >> 2
不同(其产生-3
):
它是[按位运算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)。 – Danny