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

在JavaScript find()polyfill中使用bitshift运算符,javascript,arrays,bit-shift,Javascript,Arrays,Bit Shift,有人能解释一下为什么在以下情况下需要使用>位移位运算符: 我知道它有时被用作将浮点值截断为整数的丑陋方式,但这里的情况似乎不是这样,因为list的length值无论如何都是整数。您可以应用数组.prototype.find()方法,该方法适用于任何属性为整数>=0且具有长度属性的对象。如果我们的奇异数组的length属性是一个计算属性而不是一个完美整数,那么可以安全地首先将它的length属性截断为一个整数。由于Math.trunc()是一种ES6功能,因此使用>运算符和0参数符合多边形填充的性

有人能解释一下为什么在以下情况下需要使用
>
位移位运算符:


我知道它有时被用作将浮点值截断为整数的丑陋方式,但这里的情况似乎不是这样,因为
list
length
值无论如何都是整数。

您可以
应用
数组.prototype.find()
方法,该方法适用于任何属性为整数>=0且具有
长度
属性的对象。如果我们的奇异数组的
length
属性是一个计算属性而不是一个完美整数,那么可以安全地首先将它的
length
属性截断为一个整数。由于
Math.trunc()
是一种ES6功能,因此使用
>
运算符和
0
参数符合多边形填充的性质

var obj={7:g',1:b',2:c',0:a',长度:4.7},
val=[].find.call(obj,v=>v==“c”);
控制台日志(val)
我知道它有时被用作将浮点值截断为整数的丑陋方式

不完全是<代码>值>>>0
是使用抽象操作的唯一公开方式

具有其长度必须为Uint32值的不变量:

每个数组对象都有一个length属性,其值始终为 小于232的非负整数

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

您需要使用ToUint32,因为您不知道这个
将在数组方法中是什么,它可以是非数组对象,甚至是原语。否则,
对象(这个)
也就没有必要了

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