在一些数组原型函数的MDN中的几个聚合填充示例中,有以下两行(例如:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find):
var list = Object(this); var length = list.length >>> 0;
我认为第一个例子是autoBoxing(?).但是,无论如何,无论如何总是将它成为一个数组,它的目的是什么?
和第2行,这有什么不同:
var length = list.length || 0;
谢谢!
解决方法
这使得可以在遵循规范的情况下在严格模式下调用不是数组的功能(使用调用或应用).
如果它是一个Array的实例,或类似数组的对象,它不会改变.
但是在这里,由于这个行确保列表是一个对象,跟随一个检查,这不是null或未定义,并且其他值不会使以下访问失败(除了非常特殊的情况下,Object(this)将不能解决,像失败的访问者),我不知道是否真的有一点.也许这是在检查之前设置的,也可能是在这里,以防止特殊的本地对象.另一个可能性是(也是)严格遵循specification一步一步,并希望申请toObject.
list.length>>>> 0比||好事实上,它舍入到最接近的正整数(在32位范围内).我不知道为什么>>在这里没有使用,因为直到4294967295而不是-1(即不要失去时间)迭代似乎不是更好.