在这里做出的权衡是什么? (推与阵列)

时间:2014-09-28 01:47:01

标签: javascript underscore.js

我正在查看一个underscore.js函数来从一个对象中检索值,我很想知道_.values函数的创建原因是什么。

函数in underscore.js:

  _.values = function(obj) {
    var keys = _.keys(obj);
    var length = keys.length;
    var values = Array(length);
    for (var i = 0; i < length; i++) {
      values[i] = obj[keys[i]];
    }
    return values;
  };

我相信这也会奏效:

  _.values = function(obj) {
    var keys = _.keys(obj);
    var length = keys.length;
    var values = [];
    for (var i = 0; i < length; i++) {
      values.push(obj[keys[i]]);
    }
    return values;
  };

使用#1与#2之间的权衡是什么。是仅仅为了表现还是还有其他事情?

感谢。

1 个答案:

答案 0 :(得分:3)

第一种方法允许JS运行时立即分配正确的内存量。

在空数组上调用push()将强制数组在其变满时调整大小,浪费时间和内存。