缩短语法会浪费内存吗?

时间:2010-09-16 09:42:09

标签: javascript optimization complexity-theory

我发现将类似数组的对象(例如NodeList,Arguments)转换为真实数组的简洁方法是使用:

Array.prototype.slice.call(...);

然后,我想到了一种缩短语法的方法:

[].slice.call(...);

后一种方法是否会在每次调用时创建一个新数组,从而浪费时间和/或内存?我应该在复杂性必需的应用程序中避免这种语法,还是JavaScript引擎优化它?

2 个答案:

答案 0 :(得分:3)

我认为应该避免使用[]符号。如果你想节省空间,为什么不这样做:

// Once in JS
var slice = Array.prototype.slice.call;

// Many places in JS
slice(...);

答案 1 :(得分:1)

就个人而言,我没有看到使用缩短语法的主要问题。任何性能影响都是最小的(并且一些引擎无论如何都会相应地进行优化),因此归结为个人偏好。不过,有几种选择。例如,您可以使用ECMAScript第5版Function.prototype.bind将其缩短为您想要的任何内容:

var sl = Function.prototype.call.bind(Array.prototype.slice);
var myArr = sl([1, 2, 3], 1);
//-> [ 2, 3 ]

当然,bind can be implemented in unsupporting browsers

在支持的浏览器/环境中,您也可以使用Array.fromspread operator来获得相同的结果:

// Array.from works with any iterable or array-like object
var myArr = Array.from(arrayLike);

// Spread operator works only with iterables:
var myArr = [ ...arrayLike ];

如果您使用的是Traceur或Babel等转录程序,则已经支持这些转发器。