如何解决什么是 JavaScript >>> 运算符以及如何使用它?
它不仅将非数字转换为数字,还将它们转换为可以表示为 32 位无符号整数的数字。
尽管 JavaScript 的数字是双精度浮点数 (*),但按位运算符 ( 、 、 和<<
)>>
是&
根据对 32
位整数的运算定义的。执行按位运算会将数字转换为 32 位有符号整数,在进行计算然后转换回数字之前,会丢失任何分数和高于 32 的位。|``~
因此,在没有实际效果的情况下进行按位运算,例如右移 0 位>>0
,是一种快速舍入数字并确保它在 32 位 int
范围内的方法。此外,三元>>>
运算符在进行无符号运算后,将其计算结果转换为数字作为无符号整数,而不是其他有符号整数,因此它可用于将负数转换为 32
位二进制补码版本为大数字。使用>>>0
确保你有一个介于 0 和 0xFFFFFFFF 之间的整数。
在这种情况下,这很有用,因为 ECMAScript 以 32 位无符号整数定义数组索引。因此,如果您尝试以array.filter
与
ECMAScript 第五版标准完全相同的方式实现,您可以像这样将该数字转换为 32 位无符号整数。
(实际上,这几乎没有实际需要,因为希望人们不会设置array.length
为0.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 举报,一经查实,本站将立刻删除。