为什么我们总是需要检查对象是否有密钥? - JS

Jam*_*gon 3 javascript

我有以下代码.

var obj = {
  name : 'Krysten',
  age : 33,
  hasPets : false
};

function listAllValues(obj) {
  // your code here
  var array = [];
  for(var key in obj) {
    if(obj.hasOwnProperty(key)) {
        var value = obj[key];
        array.push(value);
    }
}
  console.log(array);

}

listAllValues(obj);
Run Code Online (Sandbox Code Playgroud)

我想专注于这段代码:

for(key in obj) {
    if(obj.hasOwnProperty(key)) {

    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我们总是需要检查是否obj有自己的属性键?这对我来说听起来不太清楚.任何能够以非专业术语向我解释的人?对不起我在这里.

Sur*_*yan 9

hasOwnProperty检查是property对象本身的.它也可能是它原型的属性.因此,检查属性是否属于当前对象,而不是它的原型.

我有一个object,有一个prototype.使用pure for in可以打印所有属性,也可以打印prototype(id)中的属性.但是对于第二个,它只打印那些属于对象本身的那些.

var parent = {
    id: 1
};

var obj = {
   name: 'Test',
   age: 18
};

Object.setPrototypeOf(obj, parent);

// All properties, also the prototype's. See the `id` property
console.log('All properties');
for(var key in obj){
    console.log(key);
}

console.log('Only it\'s properties');
// All properties that belong only to object
for(var key in obj){
    if(obj.hasOwnProperty(key)) {
       console.log(key);
    }
}
Run Code Online (Sandbox Code Playgroud)