// hasOwnProperty approach
for (key in obj) {
if (obj.hasOwnProperty(key)) {
value = obj[key];
}
}
// Object.keys approach
keys = Object.keys(obj);
for (i = 0, l = keys.length; i < l; i++) {
value = obj[keys[i]];
}
Theo jsperf cách tiếp cận Object.keys nhanh http://jsperf.com/object-keys-vs-hasownproperty/45Tại sao Object.keys nhanh hơn hasOwnProperty?
Tại sao điều này 50% +?
Thử nghiệm của bạn có thể không phải là những gì bạn mong đợi, một tối ưu hóa đơn giản sẽ làm: 'keys = Object.keys (obj); value = obj [keys [keys.length - 1]]; 'bỏ qua vòng lặp của bạn. Trong thử nghiệm đầu tiên, nó thực hiện kiểm tra trên mỗi vòng lặp, vì lần thứ hai chỉ điền một biến với giá trị – Hacketo
Rõ ràng là 'for in' cần phải thực hiện nhiều hơn' Object.keys' và lọc bổ sung cho 'hasOwnProperty 'thậm chí còn hiệu quả hơn. – Bergi
Có lẽ vì 'Object.keys' chỉ được gọi một lần trong khi' hasOwnProperty' được gọi nhiều lần (một lần cho mỗi thuộc tính enumerable và một lần cho mỗi thuộc tính không thể đếm được). Các cuộc gọi hàm khác có nghĩa là mã chậm hơn. Ngoài ra, 'Object.keys' là một hàm gốc. Do đó, trong tất cả các xác suất nó nhanh hơn một shim JavaScript cho cùng một. –