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

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

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

最佳答案



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

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



这就是为什么规范在数组方法定义中始终使用ToUint32的原因。 Polyfills使用>>> 0而不是ToUint32,因为ToUint32不暴露给JS代码。

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

10-05 23:47