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

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

我看了Mozilla的代码,它向Array添加了一个过滤器方法,它有一行代码让我感到困惑。

var len = this.length >>> 0;

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


Helenr
浏览 411回答 3
3回答

森栏

它不仅将非数字转换为数字,还将它们转换为可以表示为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&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; === 1-1>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=== 0xFFFFFFFF&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -1>>0&nbsp; &nbsp; === -11.7>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; === 10x100000002>>>0&nbsp; === 21e21>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=== 0xDEA00000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1e21>>0&nbsp; === -0x21600000Infinity>>>0&nbsp; &nbsp; &nbsp;=== 0NaN>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; === 0null>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=== 0'1'>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; === 1'x'>>>0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; === 0Object>>>0&nbsp; &nbsp; &nbsp; &nbsp;=== 0(*:嗯,他们被定义为表现得像浮标一样。如果某些JavaScript引擎出于性能考虑,在可能的情况下实际使用INT,我不会感到惊讶。但是,这将是一个您无法利用的实现细节。)

噜噜哒

那就是无符号右位移位接线员。这与符号右位移位算子,那是未签名右位移位操作符(>>>)填充左边的零,而签名右位移位操作符(>>)填充符号位,从而在移位时保留数字值的符号。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript