为了账号安全,请及时绑定邮箱和手机立即绑定

什么是JavaScript>操作符以及如何使用它?

什么是JavaScript>操作符以及如何使用它?

Helenr 2019-06-19 19:35:16
什么是JavaScript>操作符以及如何使用它?我看了Mozilla的代码,它向Array添加了一个过滤器方法,它有一行代码让我感到困惑。var len = this.length >>> 0;我以前从未见过>在JavaScript中使用过。它是什么,它是做什么的?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


虽然JavaScript的数字是双精度浮点数(*),但按位运算符(<<, >>, &, |和~)是以32位整数的运算来定义的.执行按位操作将数字转换为32位有符号int,在进行计算之前丢失任何分数和高于32的位置位,然后再转换回数字。


所以做一个没有实际效果的按位操作,就像一个0位的右移。>>0,这是一种快速的方法来舍入一个数字,并确保它在32位int范围内。另外,三重>>>运算符在执行其无符号操作后,将其计算结果转换为数字为无符号整数,而不是其他运算符所做的有符号整数,因此它可用于将负数转换为32位-2的补码版本为一个大数字。使用>>>0确保您有一个介于0到0xFFFFFF之间的整数。


在本例中,这很有用,因为ECMAScript根据32位无符号INT定义数组索引。所以如果你想实现array.filter以一种与ECMAScript第五版标准完全相同的方式,您可以像这样将数字转换为32位无符号int。


(在现实中,没有什么实际的需要,因为希望人们不会设置array.length到0.5, -1, 1e21或'LEMONS'..但这是我们所说的JavaScript作者,所以你永远不会知道.)


摘要:


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引擎出于性能考虑,在可能的情况下实际使用INT,我不会感到惊讶。但是,这将是一个您无法利用的实现细节。)


查看完整回答
反对 回复 2019-06-19
?
噜噜哒

TA贡献1784条经验 获得超7个赞

那就是无符号右位移位接线员。这与符号右位移位算子,那是未签名右位移位操作符(>>>)填充左边的零,而签名右位移位操作符(>>)填充符号位,从而在移位时保留数字值的符号。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信