一般會用 for-in 取得物件的屬性,但是物件有函數的話就會造成問題了
這時可以用hasOwnProperty()過濾原型屬性
// the object
var man = {
hands: 2,
legs: 2,
heads: 1
};
// somewhere else in the code
// a method was added to all objects
if (typeof Object.prototype.clone === "undefined") {
Object.prototype.clone = function () {};
}
for (var key in man) {
if (man.hasOwnProperty(key)) { // 過濾
console.log(key, ":", man[key]);
}
}
/* 控制台顯示結果
hands : 2
legs : 2
heads : 1
*/
不用hasOwnProperty()過濾的話
for (var key in man) {
console.log(key, ":", man[key]);
}
/*控制台顯示結果
hands : 2
legs : 2
heads : 1
clone: function()
*/
另外一種使用方法如下:
for (var key in man) {
if (Object.prototype.hasOwnProperty.call(man, key)) { // filter
console.log(key, ":", man[key]);
}
}
這樣寫的好處是可以防止man重新定義了hasOwnProperty方法導致的衝突。
如果不想寫這麼長的一串,你也可以這樣:
var key, hasOwn = Object.prototype.hasOwnProperty;
for (key in man) {
if (hasOwn.call(man, key)) { // filter
console.log(key, ":", man[key]);
}
}