微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

尽管 JavaScript 的数字是双精度浮点数 (*),但按位运算符 ( 、 、 和<<)>>&根据对 32 位整数的运算定义的。执行按位运算会将数字转换为 32 位有符号整数,在进行计算然后转换回数字之前,会丢失任何分数和高于 32 的位。|``~

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

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

(实际上,这几乎没有实际需要,因为希望人们不会设置array.length0.5-1或。但这是我们正在谈论的 JavaScript 作者,所以你永远不知道...... 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

(*: 嗯,它们被定义为像浮点数一样。如果某些 JavaScript 引擎出于性能原因在可能的情况下实际使用整数,我不会感到惊讶。但这将是一个实现细节,你不会采取任何的优势。)

解决方法

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

var len = this.length >>> 0;

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。