Mảng chỉ nên có mục với các phím số (mảng cũng là đối tượng mà bạn thực sự không nên nhầm lẫn giữa chúng).
Nếu bạn chuyển đổi một mảng thành JSON, quá trình này sẽ chỉ tính đến các thuộc tính số. Các thuộc tính khác chỉ đơn giản là bị bỏ qua và đó là lý do tại sao bạn nhận được một mảng trống như là kết quả. Có lẽ điều này rõ ràng hơn nếu bạn nhìn vào length
của mảng:
> AssocArray.length
0
gì thường được gọi là "mảng kết" thực sự chỉ là một đối tượng trong JS:
var AssocArray = {}; // <- initialize an object, not an array
AssocArray["a"] = "The letter A"
console.log("a = " + AssocArray["a"]); // "a = The letter A"
JSON.stringify(AssocArray); // "{"a":"The letter A"}"
Thuộc tính của các đối tượng có thể được truy cập thông qua ký hiệu mảng hoặc ký hiệu chấm (nếu khóa không phải là từ khóa dành riêng). Do đó, AssocArray.a
cũng giống như AssocArray['a']
.
Nguồn
2010-12-13 02:03:24
Không chính xác; mảng cũng là các đối tượng. 'Json.stringify' bỏ qua các thuộc tính không mảng của mảng. – SLaks
@SLaks: Tôi không bao giờ nói rằng mảng không phải là đối tượng;) Tôi chỉ nói rằng người ta không thể sử dụng mảng như mảng kết hợp (ok có lẽ một người có thể * vì * họ * là * đối tượng, nhưng tôi nghĩ điều này thực sự xấu và gây nhầm lẫn và cuối cùng bạn chịu trách nhiệm cho sự sụp đổ của vũ trụ ...). –
Chỉ cần làm rõ câu trả lời: khi bạn initalize nó sử dụng '{}' hoặc 'new Object()', ** NOT ** '[]' hoặc 'new Array()' – Thymine