(零填充右移)详解

5
可能重复:(a >>> 0)有什么用? 我在查看array.indexOf()时,意识到IE7不支持该函数。我正在阅读MDC并查看他们如何将其原型化到不支持它的浏览器中。我正在阅读它,试图理解所有内容,但我不确定我是否完全理解了它。主要的困惑是位运算符,特别是>>>。我不确定这个运算符有什么用。下面是他们使用的方式。有人能解释一下它的用处以及为什么不能只使用if (t.length === 0)吗?
 var t = Object(this);  
 var len = t.length >>> 0;  
 if (len === 0)  
   return -1; 

我刚刚也读到了这篇文章,但我仍然不确定。他的解释似乎是说它确保它是一个非负数...但像其中一条评论所说,我不知道数组长度可以返回负数。 - A Wizard Did It
请阅读我在我的回答中对@Marcel的评论,Array.prototype的方法是有意通用的,这意味着它们可以用于类似数组的对象。此外,Mozilla实现这些数组方法,尽可能地模仿了ECMA-262规范的行为,并且>>>运算符是模拟ToUint32内部操作的最短方式,所有这些方法都在内部使用... - Christian C. Salvadó
1个回答

7

它允许在类似数组的对象上调用indexOf,这些对象可能具有奇怪的length属性。

例如:

var fakeArray = { length: -3, '0': true, '1': false, '2': null };

抱歉,请问有什么“类似数组”的对象的示例吗? - A Wizard Did It
@Stanley:任何具有length属性和名为012等的属性的对象。 - SLaks
哦,你的编辑真的澄清了事情……我甚至没有像那样考虑过。谢谢。 - A Wizard Did It
@Stanley:你从执行 document.getElementsByTagName('span') 中得到了什么?那是一个 NodeList,它的行为类似于数组但并不是数组。在 JavaScript 领域中还有其他类似的对象,但这是最常见的。尽管如此,我不知道是否存在长度可以为负数的类似数组的对象。 - slebetman
@slebetman,请注意,对于宿主对象,如NodeLists等,规范不能保证可以将诸如indexOfslice等Array方法应用于它们:“是否可以成功地将indexOf函数应用于宿主对象取决于实现。” - Christian C. Salvadó
@CMS:我正在回答“什么是类似于数组的对象”的例子。 - slebetman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接