最近我一直在思考。
过去我曾使用过[].slice.call
或者[].forEach.call
等等... 我认为这样做很棒,因为它可以轻松地将类似数组的东西转换为真正的数组。
然而,后来我开始思考,最好像这样做:Array.prototype.slice.call
或Array.prototype.forEach.call
。
我正确地认为这样做有更好的性能吗?原因如下:
[].slice.call
会创建一个空数组,然后访问数组的原型,并且需要稍后进行垃圾回收。Array.prototype.slice.call
会直接调用数组原型方法,不会先创建一个空数组,然后遍历原型树。
我有没有漏掉什么?还有,是否有任何我忽略的情况,例如在某些情况下[]
比Array.prototype
更好?
[]
的主要原因只是因为它更短。 - Barmar[].slice.call
,而是将Array.prototype.slice
保存在本地的变量中。我之所以不使用[].slice.call
,是因为它创建了一个从未使用过的对象,即使它很可能不会对性能产生明显影响。 - t.nieseArray.prototype.slice.call(arguments-or-whatever)
是一种常见的模式,用于将类数组对象(如函数参数)转换为“真正的”数组。 - laconbass