Câu trả lời mạnh mẽ nhất (nghĩa là nắm bắt được ý định của những gì bạn đang cố gắng thực hiện trong khi gây ra ít lỗi nhất) sẽ là:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(myObj);
Có một loại quy ước trong JavaScript mà bạn không thêm các thứ vào Object.prototype , vì nó có thể phá vỡ các liệt kê trong các thư viện khác nhau. Thêm các phương thức vào Object thường là an toàn.
Đây là bản cập nhật vào năm 2016 và triển khai rộng rãi ES5 và hơn thế nữa. Đối với IE9 + và tất cả các trình duyệt có khả năng ES5 + hiện đại khác, bạn có thể sử dụng Object.keys()
để đoạn mã trên trở thành:
var size = Object.keys(myObj).length;
Điều này không phải sửa đổi bất kỳ nguyên mẫu hiện có kể từ khi Object.keys()
được xây dựng.
Chỉnh sửa : Các đối tượng có thể có các thuộc tính tượng trưng không thể được trả về thông qua phương thức Object.key. Vì vậy, câu trả lời sẽ không đầy đủ mà không đề cập đến chúng.
Loại biểu tượng đã được thêm vào ngôn ngữ để tạo định danh duy nhất cho các thuộc tính đối tượng. Lợi ích chính của loại Biểu tượng là ngăn ngừa ghi đè.
Object.keys
hoặc Object.getOwnPropertyNames
không làm việc cho các thuộc tính tượng trưng. Để trả lại chúng, bạn cần sử dụng Object.getOwnPropertySymbols
.
var person = {
[Symbol('name')]: 'John Doe',
[Symbol('age')]: 33,
"occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2