谁能解释为什么the Array.find() polyfill shown on the MDN website需要>>>
移位运算符:
....
var list = Object(this);
var length = list.length >>> 0;
....
我知道有时将其用作将浮点值截断为整数的丑陋方法,但在这里似乎并非如此,因为
length
的list
值无论如何都是整数。 最佳答案
不完全是。 value >>> 0
是使用ToUint32(value)抽象操作的唯一公开方式。
Arrays具有不变性,即它们的长度必须是Uint32值:
这就是为什么规范在数组方法定义中始终使用ToUint32的原因。 Polyfills使用>>> 0
而不是ToUint32,因为ToUint32不暴露给JS代码。
您需要使用ToUint32,因为您不知道数组方法中的this
是什么,它可以是非数组对象,甚至可以是基元。否则就不需要Object(this)
了。