Đối với mã sản xuất đòi hỏi một khả năng tương thích với các trình duyệt lớn khách hàng tôi vẫn đề nghị trả lời Ivan Nevostruev của trên với shim để đảm bảo Object.keys
trong trình duyệt cũ. Tuy nhiên, có thể nhận được chức năng chính xác được yêu cầu bằng tính năng defineProperty
mới của ECMA.
Tính đến ECMAScript 5 - Object.defineProperty
Tính đến ECMA5 bạn có thể sử dụng Object.defineProperty()
để xác định tính chất phi đếm được. Các current compatibility vẫn có nhiều để được mong muốn, nhưng điều này cuối cùng sẽ trở thành có thể sử dụng trong tất cả các trình duyệt. (Cụ thể lưu ý không tương thích hiện tại với IE8!)
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
var keys = [];
for(var i in this) if (this.hasOwnProperty(i)) {
keys.push(i);
}
return keys;
},
enumerable: false
});
var o = {
'a': 1,
'b': 2
}
for (var k in o) {
console.log(k, o[k])
}
console.log(o.keys())
# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]
Tuy nhiên, vì ECMA5 đã thêm Object.keys
bạn cũng có thể sử dụng:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
câu trả lời gốc
Object.prototype.keys = function()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
Chỉnh sửa: Kể từ khi câu trả lời này đã được khoảng một thời gian tôi sẽ để lại ở trên bị ảnh hưởng. Bất cứ ai đọc điều này cũng nên đọc câu trả lời của Ivan Nevostruev dưới đây.
Không có cách nào để tạo các hàm nguyên mẫu không thể đếm được dẫn đến chúng luôn bật lên trong các vòng lặp for-in không sử dụng hasOwnProperty
. Tôi vẫn nghĩ câu trả lời này sẽ là lý tưởng nếu mở rộng nguyên mẫu của Object không quá lộn xộn.
tôi chỉ cần nhảy vào javascript nhưng bài đăng này có thể giúp bạn. http://dean.edwards.name/weblog/2006/07/enum/ –
Bản sao có thể có của [Lấy mảng khóa của đối tượng] (http://stackoverflow.com/questions/8763125/get-array-of-objects- phím) – blo0p3r
Điều gì về việc nhận được các giá trị từ các phím? Ngoài ra, nhận được số lượng các khóa trong một băm. –