Object([])是什么;做?

时间:2015-05-26 10:09:44

标签: javascript arrays

在MDN中针对某些Array原型函数的几个polyfill示例中,有以下两行(例如:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find):

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

我认为第一个例子是自动装箱(?)。但是,无论如何this总是成为一个数组,它的目的是什么呢?

第2行,这有何不同:

var length = list.length || 0;

谢谢!

1 个答案:

答案 0 :(得分:6)

这使得可以在严格模式下使用callapply调用函数,而不是数组,而是遵循规范。

如果它是Array的实例,或类似数组的对象,则它不会改变任何内容。

但是在这里,因为确保list是对象的这一行遵循this既不是null也不是undefined的检查,并且其他值不会使以下访问失败(除了Object(this)无法解决的特殊情况,例如失败的访问者),我不确定是否真的有意义。也许它是在检查之前设置的,或者它可能就在特殊的原生对象的情况下。另一种可能性是它(也是?)一步一步严格遵循specification并想要应用toObject

list.length >>> 0优于|| 0,因为它舍入到最接近的较低正整数(在32位范围内)。我不确定为什么>>在这里没有被使用,因为迭代到4294967295而不是-1(即不要浪费时间)似乎不是更好。