gpt4 book ai didi

javascript - 什么是 JavaScript >>> 运算符以及如何使用它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:22 25 4
gpt4 key购买 nike

我正在查看来自 Mozilla 的代码,它向 Array 添加了一个过滤方法,其中有一行代码让我感到困惑。

var len = this.length >>> 0;

我以前从未见过 >>> 在 JavaScript 中使用过。
它是什么以及它有什么作用?

最佳答案

它不仅将非数字转换为数字,还将它们转换为可以表示为 32 位无符号整数的数字。

虽然 JavaScript 的数字是 double float (*),但按位运算符(<<>>&|~)是根据 32 位整数的运算定义的.执行按位运算会将数字转换为 32 位有符号整数,丢失所有小数和高于 32 位的位,然后再进行计算然后转换回数字。

所以做一个没有实际效果的按位运算,比如向右移动 0 位 >>0 , 是一种快速舍入数字并确保它在 32 位 int 范围内的方法。此外,三元组 >>>运算符在执行其无符号运算后,将其计算结果转换为 Number 作为无符号整数,而不是其他人所做的带符号整数,因此它可用于将负数转换为 32 位二进制补码版本作为大数字。使用 >>>0确保你有一个介于 0 和 0xFFFFFFFF 之间的整数。

在这种情况下这很有用,因为 ECMAScript 根据 32 位无符号整数定义数组索引。因此,如果您尝试实现 array.filter以与 ECMAScript 第五版标准完全相同的方式,您可以像这样将数字转换为 32 位无符号整数。

实际上,这几乎没有实际需要,因为希望人们不会设置 array.length0.5 , -1 , 1e21'LEMONS' .

总结:

1>>>0            === 1
-1>>>0 === 0xFFFFFFFF -1>>0 === -1
1.7>>>0 === 1
0x100000002>>>0 === 2
1e21>>>0 === 0xDEA00000 1e21>>0 === -0x21600000
Infinity>>>0 === 0
NaN>>>0 === 0
null>>>0 === 0
'1'>>>0 === 1
'x'>>>0 === 0
Object>>>0 === 0

(*: 好吧,它们被定义为表现得像 float 。如果某些 JavaScript 引擎出于性能原因实际使用整数,我不会感到惊讶。但这将是一个实现细节,你不会得到利用任何优势。)

关于javascript - 什么是 JavaScript >>> 运算符以及如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348438/

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