登录
注册
node.js 学习社区
argument 转换成 Array的方式

盖碗茶

2014-12-10 22:31

node源代码中基本是 Array.prototype.slice.call(arguments) 的方式,不过做了一下benchmark,还是最原始的方式最快,不知道大家又是使用什么方式的呢?

var Benchmark = require('benchmark');

function slice() {
  return Array.prototype.slice.call(arguments);
}

function forAndArrayPush() {
  var args = [];
  for (var i = 0, l = arguments.length; i < l; i++) {
    args.push(arguments[i]);
  }
  return args;
}

function forAndArraySet() {
  var args = [];
  for (var i = 0, l = arguments.length; i < l; i++) {
    args[i] = arguments[i];
  }
  return args;
}

var suite = new Benchmark.Suite();

suite
.add('slice()', function () {
  slice(1, 2, 3, 4, 5);
})
.add('forAndArrayPush()', function () {
  forAndArrayPust(1, 2, 3, 4, 5);
})
.add('forAndArraySet()', function () {
  forAndArraySet(1, 2, 3, 4, 5);
})
// add listeners
.on('cycle', function (event, bench) {
  console.log(String(bench));
})
.on('complete', function () {
  console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
.run({ async: true });

测试结果:

$ node argument2array.js 
slice() x 3,620,855 ops/sec ±6.12% (79 runs sampled)
forAndArrayPust() x 5,377,382 ops/sec ±5.86% (78 runs sampled)
forAndArraySet() x 3,542,476 ops/sec ±3.88% (82 runs sampled)
Fastest is forAndArrayPust()

大家可以到 jsperf 上亲自测试一下: arguments to Array

原文引自:http://cnodejs.org/topic/4fcf5ced6ec584be59063a17

回复 · 0

发表回复

你可以在回复中 @ 其他人