แม้ว่าอาร์เรย์จะเป็นวัตถุใน JavaScript แต่ก็ไม่แนะนำให้ใช้ A For In Loop เพื่อสำรวจอาร์เรย์ ในความเป็นจริงมีเหตุผลหลายประการที่จะป้องกันไม่ให้เราใช้ในการวนรอบสำหรับอาร์เรย์
เพราะสำหรับการวนรอบจะระบุคุณสมบัติทั้งหมดในห่วงโซ่ต้นแบบและวิธีเดียวที่จะป้องกันได้คือการใช้ HasownProperty เพื่อตัดสินซึ่งจะช้ากว่าปกติสำหรับลูป
การข้าม
เพื่อประสิทธิภาพที่ดีที่สุดในการสำรวจอาร์เรย์วิธีที่ดีที่สุดคือการใช้คลาสสิกสำหรับลูป
การคัดลอกรหัสมีดังนี้:
var list = [1, 2, 3, 4, 5, ...... 100000000];
สำหรับ (var i = 0, l = list.length; i <l; i ++) {
console.log (รายการ [i]);
-
มีเคล็ดลับพิเศษที่นี่ซึ่งคือแคชความยาวของอาร์เรย์โดย l = list.length
แม้ว่าความยาวของทรัพย์สินจะถูกกำหนดไว้ในอาร์เรย์เอง แต่ก็ยังมีค่าใช้จ่ายในการสำรวจแต่ละวง แม้ว่าเอ็นจิ้น JavaScript ล่าสุดอาจมีการเพิ่มประสิทธิภาพประสิทธิภาพสำหรับสถานการณ์นี้ แต่คุณไม่สามารถรับประกันได้ว่ารหัส JavaScript ของคุณจะทำงานบนเบราว์เซอร์นี้เสมอ
ในความเป็นจริงลูปที่ไม่มีความยาวแคชช้ากว่าลูปมากกับความยาวแคช
คุณลักษณะความยาว
แม้ว่าแอตทริบิวต์ความยาวจะส่งคืนจำนวนองค์ประกอบในอาร์เรย์ผ่านวิธี Getter เท่านั้นอาร์เรย์สามารถถูกตัดทอนได้โดยวิธีการตั้งค่า
การคัดลอกรหัสมีดังนี้:
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
ฟู; // [1, 2, 3]
foo.length = 6;
foo.push (4);
ฟู; // [1, 2, 3, ไม่ได้กำหนด, ไม่ได้กำหนด, ไม่ได้กำหนด, 4]
การกำหนดหมายเลขเล็ก ๆ ให้กับแอตทริบิวต์ความยาวจะตัดทอนอาร์เรย์และหากกำหนดหมายเลขที่ใหญ่กว่าจะไม่ตัดทอนอาร์เรย์
สรุป
เพื่อประสิทธิภาพที่ดีที่สุดขอแนะนำให้ใช้ A for loop แทน A for in loop ในขณะที่แคชแอตทริบิวต์ความยาว
นอกจากนี้ยังมีวัตถุอาร์เรย์ที่ไม่มีวิธีการมีเพียงความยาวแอตทริบิวต์ที่ไม่ซ้ำกัน วัตถุสตริงมีวิธีความยาว ~~