var arr = Array.prototype.slice.call( htmlCollection )
จะมีผลเช่นเดียวกันโดยใช้รหัส "ดั้งเดิม"
แก้ไข
เนื่องจากสิ่งนี้ได้รับมุมมองจำนวนมากโปรดทราบ (ต่อความคิดเห็นของ @ oriol) ว่าการแสดงออกที่กระชับยิ่งขึ้นต่อไปนี้เทียบเท่าได้อย่างมีประสิทธิภาพ :
var arr = [].slice.call(htmlCollection);
แต่ทราบตามความคิดเห็นของ @ JussiR ซึ่งแตกต่างจากรูปแบบ "verbose" มันสร้างอินสแตนซ์อาร์เรย์ที่ว่างเปล่าไม่ได้ใช้และไม่สามารถใช้งานได้จริงในกระบวนการ คอมไพเลอร์ทำอะไรเกี่ยวกับเรื่องนี้อยู่นอก ken ของโปรแกรมเมอร์
แก้ไข
ตั้งแต่ ECMAScript 2015 (ES 6) ก็มีArray ด้วยเช่นกัน:
var arr = Array.from(htmlCollection);
แก้ไข
ECMAScript 2015 ยังให้บริการตัวดำเนินการสเปรดซึ่งเทียบเท่ากับหน้าที่Array.from
(แม้ว่าโปรดทราบว่าArray.from
รองรับฟังก์ชั่นการทำแผนที่เป็นอาร์กิวเมนต์ที่สอง)
var arr = [...htmlCollection];
ฉันยืนยันว่าทั้งสองข้อทำงานNodeList
ได้ดี
การเปรียบเทียบประสิทธิภาพสำหรับวิธีการที่กล่าวถึง: http://jsben.ch/h2IFA
for (var a=[], i=collection.length; i;) a[--i] = collection[i];
เพื่อไม่มากของ "นักโทษ" มี :-)