编程语言
首页 > 编程语言> > 在JavaScript find()polyfill中使用bitshift运算符

在JavaScript find()polyfill中使用bitshift运算符

作者:互联网

谁能解释为什么>>> the Array.find() polyfill shown on the MDN website中需要位移位运算符:

....
var list = Object(this);
var length = list.length >>> 0;
....

我知道有时将其用作将浮点值截断为整数的丑陋方法,但在这里似乎并非如此,因为list的长度值无论如何都是整数.

解决方法:

I understand it is sometimes used as an ugly way to truncate floating point values to integers

不完全是.值>>> 0是使用ToUint32(value)抽象操作的唯一公开方式.

Arrays具有不变性,即它们的长度必须是Uint32值:

Every Array object has a length property whose value is always a
nonnegative integer less than 232.

这就是为什么该规范在数组方法定义中始终使用ToUint32的原因. Polyfills使用>>> 0而不是ToUint32,因为ToUint32没有公开给JS代码.

您需要使用ToUint32,因为您不知道这在数组方法中将是什么,它可以是非数组对象,甚至是基元.否则,Object(this)也不是必需的.

标签:bit-shift,arrays,javascript
来源: https://codeday.me/bug/20191026/1936736.html