for...in 語(yǔ)句用于遍歷數(shù)組或者對(duì)象的屬性.
一般情況下戏罢,for in 循環(huán)只會(huì)遍歷我們自定義的屬性竟秫,原型上默認(rèn)的屬性不會(huì)遍歷出來(lái)骤铃。例如Object.prototype.toString()
眯娱、Object.prototype.hasOwnProperty()
是不會(huì)被遍歷出來(lái)的铣墨。
但在實(shí)際應(yīng)用中绿聘,如果是在原型中新增屬性或者方法嗽上,for...in會(huì)將原型中新增的屬性和方法遍歷出來(lái)。
舉個(gè)例子:
Object.prototype.score = '97';
let people = {
name:'小紅',
age : 15,
}
for(let key in people ){
console.log(key+':'+people[key]);
}
>>>>>>
>name:小紅
>age:15
>score:97
很明顯上述的score一項(xiàng)是我們不希望看到的斜友,解決方法如下:
Object.prototype.score = '97';
let people = {
name:'小紅',
age : 15,
}
for(let key in people ){
if(!Object.prototype.hasOwnProperty.call(people,key)) continue;
console.log(key+':'+people[key]);
}
>>>>>>
>name:小紅
>age:15
Object.hasOwnProperty(prop)
用來(lái)判斷某個(gè)對(duì)象是否含有指定的屬性的炸裆,返回值為Boolean ,該方法會(huì)忽略掉那些從原型鏈上繼承到的屬性鲜屏。
使用 hasOwnProperty 方法判斷屬性是否存在:
let obj = new Object();
obj.prop = 'exists';
function changeO() {
obj.newprop = obj.prop;
delete obj.prop;
}
obj.hasOwnProperty('prop'); // 返回 true
changeO();
obj.hasOwnProperty('prop'); // 返回 false
obj.hasOwnProperty('newprop');