【问题标题】:>>> (Zero-fill right shift) Elaboration [duplicate]>>>(零填充右移)细化[重复]
【发布时间】:2011-05-08 06:14:02
【问题描述】:

可能重复:
What good does zero-fill bit-shifting by 0 do? (a >>> 0)

我在看array.indexOf(),我知道IE7 本身并不支持它。我正在阅读 MDC 并在不支持它的浏览器中看到 their example of how to prototype it。我正在通读它,试图了解一切是如何运作的,但我不确定我是否 100% 理解它。造成混淆的主要原因是位运算符,特别是>>>。我不确定这个运算符有什么用。以下是他们使用它的方式。谁能准确解释它的用途以及为什么不能只使用if (t.length === 0)

 var t = Object(this);  
 var len = t.length >>> 0;  
 if (len === 0)  
   return -1; 

【问题讨论】:

  • 我刚才也读到了,我还不是100%。他的解释似乎是说它确保它是一个非负数......但就像其中一个 cmets 一样,我不知道 array.length 可以返回一个负数。
  • 阅读我在my answer 中对@Marcel 的评论,Array.prototype 的方法有意通用,这意味着它们可以用于类数组对象。此外,这些 Array 方法的 Mozilla 实现试图尽可能地模仿 ECMA-262 Specification 的行为,而 >>> 运算符是模仿 ToUint32 internal operation 的最短方法,所有这些方法都在内部使用。 .

标签: javascript


【解决方案1】:

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

例如:

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

【讨论】:

  • 对不起,“类数组”对象的示例是什么?
  • @Stanley:任何具有length 属性和名为012、...的属性的对象。
  • 哦,你的编辑真的让事情变得清晰了......我什至没有这样想。谢谢。
  • @Stanley:你从document.getElementsByTagName('span') 中得到了什么。那是一个 NodeList,它的作用就像一个数组,但不是。 javascriptland 中还有其他的,但这是最常见的。不过,我不知道长度可以为负的任何类似数组的对象。
  • @slebetman,请注意,host objects -such NodeLists- the specification 并不能保证 indexOfslice 等数组方法可以应用于它们:“是否indexOf 函数能否成功应用于宿主对象是依赖于实现的。”
猜你喜欢
  • 2022-07-22
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2011-03-28
  • 2019-03-15
  • 2015-10-13
  • 2011-02-08
  • 2014-10-05
相关资源
最近更新 更多