Trong JavaScript khi bạn xác định một mảng bằng cách sử dụng cú pháp theo nghĩa đen, các phần tử mảng có thể được bỏ qua bằng cách sử dụng dấu phẩy thêm:Các phần tử mảng ưu tú có bao giờ tạo ra một tài sản riêng không?
a = [1, 2, 3]; // 1, 2, 3
b = [1, , 2, 3]; // 1, undefined, 2, 3
tôi nhận thấy rằng khi truy cập vào các giá trị mà các giá trị bỏ qua không "tài sản riêng"
b.hasOwnProperty(1); //false
Ngược lại, nếu bạn định nghĩa một mảng thiết một cách rõ ràng undefined
, nó sẽ được thiết lập như là một "tài sản riêng":
c = [1, undefined, 2, 3];
c.hasOwnProperty(1); //true
Hành vi của các phần tử mảng bị bỏ qua được xác định trong một spec? Nếu có, spec nào và ở đâu?
(tiền thưởng tùy chọn) Là trình duyệt chéo đáng tin cậy, chẳng hạn như bằng chứng là bảng tương thích?
Đó là thông số kỹ thuật. http://es5.github.io/#x11.1.4 * "Các phần tử mảng có thể được elided ở đầu, giữa hoặc cuối của danh sách phần tử. Bất cứ khi nào một dấu phẩy trong danh sách phần tử không có trước bởi một AssignmentExpression (ví dụ, một dấu phẩy ở đầu hoặc sau dấu phẩy khác), phần tử mảng bị thiếu góp phần vào chiều dài của mảng và làm tăng chỉ mục của các phần tử tiếp theo. không đóng góp vào chiều dài của Mảng. "* –
Hoặc trong thông số hiện tại: http://www.ecma-international.org/ecma-262/6.0/#sec-array-initializer – nils
@squint, tôi thấy rằng báo giá cụ thể, nhưng nó không nói liệu việc triển khai được dự kiến sẽ thực hiện nó như là một phần tử bị thiếu hay là một phần tử được đặt thành 'undefined'. Ít nhất là tôi hiểu nó. – zzzzBov