อาร์เรย์ JavaScript วงเล็บกับวงเล็บ


111

ความแตกต่างระหว่างคำจำกัดความอาร์เรย์แต่ละรายการต่อไปนี้คืออะไร

var myArray = [];
var myArray = {};
var myArray = new Array();

คำตอบ:


137

ที่หนึ่งและสามเทียบเท่ากันและสร้างอาร์เรย์ใหม่ อย่างที่สองสร้างวัตถุว่างใหม่ไม่ใช่อาร์เรย์

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array

เราจะเข้าถึงค่าของวัตถุได้อย่างไร
Pinkie

3
มีเครื่องหมายวงเล็บหรือจุด: myObject["someValue"]หรือmyObject.someValue. {}แน่นอนว่าวัตถุว่างที่สร้างขึ้นโดยพินัยกรรมไม่มีคุณสมบัติเหล่านั้น แต่คุณสามารถกำหนดให้กับวัตถุเหล่านั้นได้ในลักษณะเดียวกัน:myObject.someValue = "hello!"
johusman

4
ในกรณีนี้ 1 และ 3 มีผลเหมือนกัน อย่างไรก็ตามบางครั้งพวกเขาก็มีพฤติกรรมที่แตกต่างกัน ตัวอย่างเช่นถ้าvar a = new Array(5)และvar b = [5]แล้วab(ตั้งแต่a.length= 5 ในขณะที่b.length= 1 a[0]คือundefinedในขณะที่b[0]5 และอื่น ๆ .)
หูหนาน Rostomyan

เป็นvar a;และvar a = {};เดียวกันได้หรือไม่
RNA

31

var myObject = {}; เทียบเท่ากับ var myObject = new Object();

ดังนั้นตัวอย่างที่สองไม่ได้เป็นแต่โดยทั่วไปArrayObject

นี้ได้รับความสับสนเป็นArrayเป็นชั้นและObjectเป็นชั้นเรียน - แม่นยำมากขึ้นเป็นชั้นย่อยของArray Objectดังนั้นโดยทั่วไปObjectความหมายจึงใช้ได้กับArray:

var o = [];
o.push('element1');
o.push('element2');
o['property1'] = 'property value';  // define a custom property.
console.log(o.property1);
console.log(o.length);  // Outputs '2' as we've only push()'ed two elements onto the Array

2
property1 เก็บไว้ที่ไหน มันไม่ได้อยู่ในอาร์เรย์
Pinkie

9
@Pinkie: นี้กำลังจะทำให้เกิดความสับสนขณะนี้: อาร์เรย์เป็นวัตถุมากเกินไป โดยการทำเช่นo['property1'] = 'property value'นี้คุณจะไม่จริงการเพิ่มองค์ประกอบไปยังอาร์เรย์ แต่การตั้งค่าคุณสมบัติของที่วัตถุอาร์เรย์ สับสน? ฉันบอกแล้ว;) ใน JavaScript โดยพื้นฐานแล้วทุกอย่างเป็นวัตถุ วัตถุอื่น ๆ เช่นArray, RegExp... ขยายวัตถุขั้นพื้นฐานที่มีฟังก์ชั่นเพิ่มเติม plain_obj = {}ธรรมดาวัตถุที่ว่างเปล่าจะถูกสร้างขึ้นด้วยวงเล็บปีกกา
Felix Kling
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.