建议始终使用hasOwnProperty,但在许多情况下这并非必需。例如,请考虑以下代码:
var object = JSON.parse(somejsontext);
for(var prop in object) {
console.log(object[prop]);
}
根据 MOZ 的文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty,我们应该使用 hasOwnProperty
来避免迭代非可枚举属性,例如:
虽然在这种情况下 prop
是对象的一部分,并且由 for..in
明确定义,但是需要注意的是有些属性可能不可枚举。
var buz = {
fog: 'stack'
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log('this is fog (' + name + ') for sure. Value: ' + buz[name]);
}
else {
console.log(name); // toString or something else
}
}
但是实际测试该代码时,永远不会进入else分支。
那么什么时候使用hasOwnProperty
才有意义呢?
更新:考虑到所选择的答案,我们可以在以下情况下安全地避免使用hasOwnProperty
:
- Object
js没有通过任何javascript库或我们的代码进行扩展
- Object
是我们可以控制的简单代码