我有以下代码.
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有自己的属性键?这对我来说听起来不太清楚.任何能够以非专业术语向我解释的人?对不起我在这里.
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)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |