Hãy xem xét ví dụ này mã Javascript:Javascript khai mảng: Mảng mới(), Array mới (3), [ 'a', 'b', 'c'] tạo mảng mà hành xử khác nhau
a = new Array();
a['a1']='foo';
a['a2']='bar';
b = new Array(2);
b['b1']='foo';
b['b2']='bar';
c=['c1','c2','c3'];
console.log(a);
console.log(b);
console.log(c);
Kết quả trong Firebug console như sau:
Đối với một (các '[]' phải được mở rộng bằng cách nhấp vào nút '+'):
[]
a1 "foo"
a2 "bar"
Đối với b:
[undefined, undefined]
Đối với c:
["c1", "c2", "c3"]
Câu hỏi của tôi là:
- Tôi có sử dụng mảng [ 'chìa khóa'] = 'giá trị' cú pháp chính xác?
- Tại sao mảng không hoạt động như mong đợi?
- Tại sao mảng a và c hiển thị khác nhau trong bảng điều khiển? Dường như jQuery không thể lặp qua mảng với phương thức .each() của nó.
- Bạn có thể giới thiệu lại bất kỳ hướng dẫn hay về hành vi mảng Javascript không?
LƯU Ý: Firebug của Google Chrome chỉ hiển thị [] cho mảng 'a', không có tùy chọn mở rộng.
EDIT: Được rồi, có vẻ như các mảng trong Javascript chỉ có các phím số, vì vậy việc thêm chuỗi làm tên khóa làm cho đối tượng ra khỏi mảng. Nhưng tại sao jQuery không làm việc với nó?
$.each(a, function()
{
alert ('derp');
})
Mã này, được thêm vào tập lệnh, không tạo ra cảnh báo.
Bạn đang bối rối đối tượng mảng JavaScript với mảng liên kết có sẵn bằng các ngôn ngữ như PHP. Các mảng JavaScript chỉ sử dụng các chỉ số dạng số. Sử dụng cú pháp 'a ['a1'] = val' thêm thuộc tính' a1' vào đối tượng 'a', không phải giá trị mảng. –
@ P.Brian.Mackey: Có lẽ vì loại câu hỏi này đã được hỏi nhiều lần về SO. – RightSaidFred
@exizt: Firebug và các công cụ tương tự đưa ra các giả định về những gì bạn muốn hiển thị. Họ không nhất thiết phải là một đại diện của ngôn ngữ, mặc dù như được trả lời dưới đây, nó là * thường * tốt nhất để chỉ dựa vào các thuộc tính số trong các mảng JavaScript. – RightSaidFred