ここで以前に回答された質問は、これが最速の方法であると言っていました:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
私のブラウザでのベンチマークでは、これより 3 倍以上遅いことがわかりました。
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
どちらも同じ出力を生成しますが、2 番目のバージョンが可能な限り最速の方法であるとは信じがたいと思います。
これは私のブラウザ (Chromium 6) の癖ですか? それとももっと速い方法がありますか?
編集:気になる人のために、私は以下に落ち着きました(これは私がテストしたすべてのブラウザーで最速のようです):
//nl is a NodeList
var l = []; // Will hold the array of Node's
for(var i = 0, ll = nl.length; i != ll; l.push(nl[i++]));
EDIT2:さらに速い方法を見つけました
// nl is the nodelist
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));