kub*_*uba 5 javascript operators
我只是通过Mozilla开发人员文档查看,并发现我不知道用于什么的符号,也无法通过互联网找到任何信息.
var t = Object(this);
var len = t.length >>> 0;
Run Code Online (Sandbox Code Playgroud)
有什么建议这个运营商是为了什么?
长话短说
\n\nt.length >>> 0;\nRun Code Online (Sandbox Code Playgroud)\n\n实际上尝试从 中获取有效的 32 位无符号整数t.length。据我们所知,t.length可以是任何类型(对象、数组、字符串等)。>>> 0如果它已经是有效的 32 位无符号数,则返回未更改的值。例如,
console.log({} >>> 0);\n// 0\nconsole.log([] >>> 0);\n// 0\nconsole.log("Google" >>> 0);\n// 0\nRun Code Online (Sandbox Code Playgroud)\n\n通常,这种按位技巧用于避免if块类型检查,如下所示
var len = 0;\nif (typeof data === \'number\') {\n len = data;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果它是浮点值,我们可能仍然需要转换len为整数。
解释
\n\n>>>称为零填充右移运算符。除了用作按位运算符之外,它还用于从对象中获取 32 位数值。ECMA Script 5.1 规范>>>指出
\n\n\n\n
\n- 令lref为计算ShiftExpression的结果。
\n- 令lval为 GetValue( lref )。
\n- 令rref为计算AdditiveExpression的结果。
\n- 令rval为 GetValue( rref )。
\n- 令lnum为 ToUint32( lval )。
\n- 令rnum为 ToUint32( rval )。
\n- 令shiftCount为屏蔽掉rnum的除最低有效 5 位之外的所有结果,即计算rnum & 0x1F。
\n- 返回对lnum执行零填充右移 shiftCount 位的结果。空出的位用零填充。结果是一个无符号 32 位整数。
\n
它基本上将两个操作数都转换为 32 位无符号整数(步骤 5 和 6),并将左侧表达式、右侧表达式移位几次。
\n\n如果我们看一下的定义ToInt32,
\n\n\n\n
\n- 令number为对输入参数调用 ToNumber 的结果。
\n- 如果数字为 NaN、+0、\xe2\x88\x920、+\xe2\x88\x9e 或 \xe2\x88\x92\xe2\x88\x9e,则返回 +0。
\n- 设posInt为sign( number )*floor(abs( number ))。
\n- 设int32bit为posInt modulo 2 32;即,具有正号且大小小于 2 32的 Number 类型的有限整数值k,使得posInt和k的数学差在数学上是 2 32的整数倍。
\n- 返回int32bit。
\n
首先,参数被转换为一个数字(如果它不是一个有效的数字,那么NaN将由 返回ToNumber)。步骤 4 确保您返回 0 到 2 32范围内的有效数字。