ซึ่งแตกต่างจากภาษา Java อาร์เรย์ใน JavaScript มีสามคุณสมบัติ:
1. ไม่มีประเภท สมาชิกของอาร์เรย์สามารถเป็นประเภทใดก็ได้และอาเรย์เดียวกันสามารถประกอบด้วยสมาชิกหลายประเภท
2. ความยาวเป็นตัวแปร ความยาวของอาร์เรย์สามารถเปลี่ยนแปลงได้แบบไดนามิกดังนั้นจึงไม่มีปัญหาในการเข้าถึงอาร์เรย์นอกขอบเขตใน JavaScript
3. ความไม่ต่อเนื่อง ตำแหน่งของสมาชิกในอาเรย์สามารถต่อเนื่อง (0, 1, 2, 3 …) หรือไม่ต่อเนื่อง อาร์เรย์ใด ๆ มีแอตทริบิวต์ที่เรียกว่าความยาว เมื่อสมาชิกอาเรย์ต่อเนื่องค่าความยาวสอดคล้องกับจำนวนสมาชิกอาร์เรย์ เมื่อสมาชิกอาร์เรย์ไม่ต่อเนื่องค่าความยาวจะมากกว่าจำนวนสมาชิกอาร์เรย์ เมื่อเปรียบเทียบกับอาร์เรย์อย่างต่อเนื่องประสิทธิภาพการอ่านและการเขียนของอาร์เรย์ที่ไม่ต่อเนื่องนั้นแย่กว่า
การทดลอง:
การคัดลอกรหัสมีดังนี้:
var o = [42, "ตัวอย่างข้อความ", {x: 88}]; // อาร์เรย์ JavaScript ไม่ได้พิมพ์
console.log (o); // [42, "ตัวอย่างข้อความ", วัตถุ {x = 88}]
o [3] = 27; // จาวาสคริปต์อาร์เรย์เป็นแบบไดนามิก
console.log (o); // [42, "ตัวอย่างข้อความ", วัตถุ {x = 88}, 27]
o [5] = 99; // จาวาสคริปต์อาร์เรย์เบาบาง
console.log (o); // [42, "ตัวอย่างข้อความ", วัตถุ {x = 88}, 27, ไม่ได้กำหนด, 99]
ดังที่เห็นได้จากตัวอย่างข้างต้นสำหรับอาร์เรย์ที่ไม่ต่อเนื่อง JavaScript จะส่งคืนไม่ได้กำหนดเมื่อเข้าถึงสมาชิกที่หายไป หากอาร์เรย์ต่อเนื่อง แต่หนึ่งในสมาชิกของมันไม่ได้กำหนดผลของการเข้าถึงอาร์เรย์จะเหมือนกัน:
การคัดลอกรหัสมีดังนี้:
var a = [42, "ตัวอย่างข้อความ", {x: 88}, 27, ไม่ได้กำหนด, 99];
console.log (a); // [42, "ตัวอย่างข้อความ", วัตถุ {x = 88}, 27, ไม่ได้กำหนด, 99]
อาร์เรย์ไม่ต่อเนื่องและมีสมาชิกหายไปซึ่งเหมือนกับอาเรย์ต่อเนื่อง แต่มีสมาชิกที่ไม่ได้กำหนด ในทั้งสองกรณีผลลัพธ์ของการเข้าถึงเนื้อหาอาร์เรย์เหมือนกัน แต่ยังมีความแตกต่างเล็กน้อยระหว่างทั้งสองซึ่งส่วนใหญ่ปรากฏในการเข้าถึงคีย์อาร์เรย์:
การคัดลอกรหัสมีดังนี้:
console.log (4 ใน o); // false
console.log (4 ใน a); // true
จะเห็นได้ว่าแม้ว่าผลลัพธ์ที่ได้จากการเข้าถึงเนื้อหาในทั้งสองกรณีนี้จะเหมือนกัน แต่กลไกภายในของพวกเขานั้นแตกต่างกันอย่างสิ้นเชิง: เมื่ออาร์เรย์ไม่ต่อเนื่องสมาชิกบางคนจะหายไปดังนั้นเมื่อเข้าถึงสมาชิก JavaScript จะส่งคืนที่ไม่ได้กำหนด; เมื่ออาร์เรย์มีความต่อเนื่องสมาชิกทุกคนมีอยู่ แต่ค่าของสมาชิกบางคนค่อนข้างพิเศษและไม่ได้กำหนด
จากตัวอย่างข้างต้นเรายังสามารถเห็นได้ว่าสาระสำคัญของอาร์เรย์ในจาวาสคริปต์เป็นเพียงวัตถุที่มีตัวเลขเป็นคีย์และไม่มีความแตกต่างระหว่างค่าคีย์ทั่วไปและวัตถุ ในความเป็นจริงเมื่ออ่านและเขียนอาร์เรย์ JavaScript จะพยายามแปลงพารามิเตอร์เป็นจำนวนเต็มบวก หากการแปลงสำเร็จการดำเนินการอาร์เรย์จะดำเนินการ (อัปเดตคุณสมบัติความยาวของอาร์เรย์โดยอัตโนมัติ) หากล้มเหลวพารามิเตอร์จะถูกแปลงเป็นสตริงแล้วอ่านและเขียนไปยังวัตถุปกติ แน่นอนในการใช้งานของล่าม JavaScript การเพิ่มประสิทธิภาพประสิทธิภาพจำนวนมากถูกสร้างขึ้นสำหรับคุณสมบัติของอาร์เรย์โดยใช้ตัวเลขเป็นคีย์ ดังนั้นในการใช้งานจริงหากปุ่มของวัตถุเป็นตัวเลขทั้งหมดโดยตรงโดยใช้วัตถุอาร์เรย์จะได้รับผลลัพธ์ที่มีประสิทธิภาพมากขึ้น
ในกระบวนการกำหนดอาร์เรย์ JavaScript อนุญาตให้มีเครื่องหมายจุลภาคเพิ่มขึ้นและยังอนุญาตให้สมาชิกอาร์เรย์ที่หายไประหว่างสอง commas:
การคัดลอกรหัสมีดังนี้:
var x = [1,2,3,]; // จุลภาคต่อท้ายจะถูกละเว้น
console.log (x.length); // 3
var y = [1 ,, 3]; // สมาชิกสามารถพลาดได้
console.log (y); // [1, ไม่ได้กำหนด, 3]
console.log (1 ใน y); // false
console.log (y.length); // 3
สำหรับการสร้างอาร์เรย์ JavaScript รองรับสี่วิธี:
1. ใช้ตัวอักษร (เช่นนิพจน์วงเล็บในตัวอย่างข้างต้น) เพื่อสร้างวัตถุอาร์เรย์โดยตรง
2. ใช้ตัวสร้างอาร์เรย์ () และไม่ผ่านพารามิเตอร์ใด ๆ ในกรณีนี้อาร์เรย์ที่ว่างเปล่าจะถูกสร้างขึ้นด้วยเอฟเฟกต์เดียวกับ []
3. ใช้ตัวสร้างอาร์เรย์ () เพื่อส่งผ่านเป็นจำนวนเต็มบวกเป็นความยาวของอาร์เรย์ ในกรณีนี้ JavaScript จะจองพื้นที่หน่วยความจำที่สอดคล้องกันเพื่อจัดเก็บอาร์เรย์นี้ เป็นที่น่าสังเกตว่าคีย์ของอาร์เรย์ไม่ได้ถูกกำหนดในเวลานี้นั่นคือไม่มีสมาชิกในอาร์เรย์ ผลกระทบของมันเทียบเท่ากับ [,,,,]
4. ใช้ตัวสร้างอาร์เรย์ () เพื่อส่งผ่านสมาชิกของอาร์เรย์
การทดลอง:
การคัดลอกรหัสมีดังนี้:
var z = อาร์เรย์ใหม่ (10); // หน่วยความจำก่อนการจัดสรร แต่ยังไม่มีการกำหนดดัชนี
console.log (3 ใน z); // false
var m = อาร์เรย์ใหม่ (42, 33, 99, "ทดสอบ", {k: 99});
console.log (m); // [42, 33, 99, "ทดสอบ", วัตถุ {k = 99}]
ในมาตรฐาน ECMASCRIPT 5, array.isarray () สามารถใช้เพื่อตรวจสอบว่าวัตถุเป็นอาร์เรย์:
การคัดลอกรหัสมีดังนี้:
array.isarray ([]); // true
array.isarray ({}); // false