Vì hasOwnProperty có một số cảnh báo và quirks (cửa sổ/sử dụng rộng rãi trong các vấn đề ie8/etc).Lợi ích của việc sử dụng Object.hasOwnProperty vs kiểm tra nếu Thuộc tính không được xác định
tôi đã tự hỏi nếu có lý do nào để thậm chí sử dụng nó, và nếu chỉ đơn giản là kiểm tra nếu một tài sản là undefined là hợp lý tốt hơn & đơn giản hơn.
Ví dụ:
var obj = { a : 'here' };
if (obj.hasOwnProperty('a')) { /* do something */ }
if (obj.a !== undefined) { /* do something */ }
// or maybe (typeof (obj.a) !== 'undefined')
Chỉ cần tự hỏi nếu có ai có bất cứ cái nhìn sâu sắc tốt về điều này, tôi muốn được sử dụng nhiều nhất qua trình duyệt thân thiện, và lên đến phương pháp ngày.
Tôi cũng đã nhìn thấy mẫu thử nghiệm này trên-ghi cho hasOwnProperty, mà làm việc, nhưng tôi không bán trên tính hữu dụng của nó ...
if (!Object.prototype.hasOwnProperty) {
Object.prototype.hasOwnProperty = function(prop) {
var proto = this.__proto__ || this.constructor.prototype;
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
};
}
Bất cứ điều gì khác hơn là sử dụng 'hasOwnProperty' được đảm bảo tạo ra các kết quả dương hoặc âm sai – Xotic750
nếu tôi biết Tôi đang tìm kiếm một mảng hoặc đối tượng hoặc chức năng, tôi thích nó thậm chí còn đơn giản hơn: if (obj.a). Tất nhiên, nếu obj.a có thể là số không, "" hoặc sai, thì so sánh nó là! == undefined là bắt buộc. Ngoài ra, đối tượng này có một "a" theo ("a" trong obj), nhưng không nếu (obj.a): {a: undefined} – dandavis
Thông tin bổ sung: Bạn có thể thấy bài kiểm tra jsPerf này thú vị: http: // jsperf .com/hasownproperty-vs-in/2. Điểm mấu chốt: '.hasOwnProperty' là ** chậm hơn rất nhiều so với bất kỳ cách nào khác để kiểm tra sự tồn tại của tài sản (điều đó thật đáng ngạc nhiên đối với tôi TBH). –