ネイティブメソッドを使用してデフォルト値を含む配列を作成する方法を検討していたところ、最終的に
function pushMap(length, fill){
var a = [], b = [];
a.length = length;
b.push.apply(b,a);
return b.map(function(){return fill;});
}
ネイティブメソッドは2回ループする必要があるのに対し、whileループは1回だけなので、whileループよりも2倍または3倍遅くなると予想されるため、jsperfで比較しました
function whileLengthNew(len, val) {
var rv = new Array(len);
while (--len >= 0) {
rv[len] = val;
}
return rv;
}
実際には18倍から27倍遅くなります (Ubuntu 上の Google Chrome でテスト済み、ブラウザー/OS は歓迎)。
そのような大きな違いを引き起こす何が起こっているのでしょうか?