我刚刚查看了Mozilla开发者文档,发现了一种我不知道用途的符号,并且在互联网上也找不到任何信息。
var t = Object(this);
var len = t.length >>> 0;
有什么建议这个运算符是用来做什么的?
我刚刚查看了Mozilla开发者文档,发现了一种我不知道用途的符号,并且在互联网上也找不到任何信息。
var t = Object(this);
var len = t.length >>> 0;
简而言之:
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规范中的>>>
指出:
它基本上将两个操作数转换为32位无符号整数(步骤5和6),并将左侧表达式向右移动右侧表达式次数。
- 计算ShiftExpression的结果并将其赋给lref。
- 计算GetValue(lref)并将其赋给lval。
- 计算AdditiveExpression的结果并将其赋给rref。
- 计算GetValue(rref)并将其赋给rval。
- 计算ToUint32(lval)并将其赋给lnum。
- 计算ToUint32(rval)并将其赋给rnum。
- 将rnum的所有位都掩码,只保留最低有效的5位,即计算rnum&0x1F。
- 通过将lnum向右移动shiftCount位来执行零填充右移操作。空出的位用零填充。结果是一个无符号的32位整数。
ToInt32
的定义,
- 将输入参数传递给 ToNumber 函数后,将结果赋值给 number。
- 如果 number 是 NaN、+0、-0、+∞ 或 -∞,则返回 +0。
- 将 abs(number) 向下取整后乘上 sign(number),将结果赋值给 posInt。
- 将 posInt 对 232 取模,即在满足数学差为 232 的倍数的前提下,找到一个 Number 类型的有正符号且绝对值小于 232 的整数值 k,使得 posInt 与 k 的差正好为 mathematically an integer multiple of 232,将该整数值赋值给 int32bit
- 返回 int32bit。
首先,将参数转换为数字(如果不是有效数字则 ToNumber 将返回 NaN)。第四步确保您返回在 0 到 232 范围内的有效数字。
这是一个"零填充右移"(按位)运算符。
该运算符将第一个操作数向右移动指定的位数。向右移动的多余位被丢弃。从左侧移入零位。符号位变为
0
,因此结果始终为非负数。对于非负数,零填充右移和符号传播右移产生相同的结果。例如,
9 >>> 2
的结果为2
,与9 >> 2
相同:但是,对于负数,情况并非如此。例如,
-9 >>> 2
的结果为1073741821
,与-9 >> 2
不同(其结果为-3
):