物件的列舉(1)-For in與 hasOwnProperty
For in
1.hasOwnProperty *****
2.in *
3.instanceof *****
列舉的英文是enumeration ,也叫遍歷的意思,比如現在有是個同學我想知道這是個同學的名字或者是其他的資訊,咱們都通過一個for迴圈,來十圈,這個過程就叫做每一個人的遍歷,或資料組的遍歷。
舉個例子:
var arr = [1,2,3,4,5,6,7,8,9];
for(var i = 0;i < arr.length;i ++){
console.log(arr[i]);
}
遍歷陣列咱們可以這樣做到。那現在我想遍歷一個物件,我想知道物件裡面屬性的屬性值是啥怎麼辦?
舉個例子:
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
}
我想知道物件裡面的屬性值是什麼?
有可能這個物件是後端傳給你的,你也拆不開,也沒有站到一個編譯器裡面來看這個物件,有人說for不行嗎?那迴圈幾圈啊,你知道嗎,都求不出他的length吧,現在你說有五個屬性,那是因為你能看到,程式在自己執行的時候是忽略你人的,那咋整啊?
想遍歷一個物件必須藉助一個新的知識: for in迴圈
這個for in迴圈其實就是簡化版的for迴圈。
var obj = { name : "123", age : "18", sex : "male", height : 180, weight : 75, } for(var pro in obj){ console.log(pro + " " +typeof(pro)); }
是不是都出來了,而且都是字串型別的!
for(var pro in obj)他的目的只有一個就是遍歷物件用的,有幾個屬性他就迴圈幾圈,而且,在迴圈的時候,他會把物件的屬性放在pro中,這個pro你可以隨便換。
屬性名我都知道了,那屬性值不也就容易了嗎
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
}
for(var pro in obj){
console.log(obj.pro);
}
五次undefined,為什麼呢?
如果這樣:
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
pro : 123,
}
for(var pro in obj){
console.log(obj.pro);
}
他會列印6個123,為什麼呢?
他把pro當成屬性了是吧,他為什麼會把pro當成屬性呢?
你想啊,我如果obj.name他底層是不是會變成obj[“name”],那把這個規律應用到這,
console.log(obj.pro ---->obj["name"]);系統就覺得你是想讓我列印pro這個屬性啊,
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
}
for(var pro in obj){
console.log(pro + " " + obj[pro]);
}
是不是這樣就行了,
現在我給obj手動加個物件:
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
_proto_ : {
lastName : "deng"
}
}
for(var pro in obj){
console.log(pro + " " + obj[pro]);
}
現在遍歷他的屬性還會不會拿出來?
會吧!
那如果我在遍歷的時候我不想拿他原型上的屬性呢?有沒有一個辦法可以判斷這個屬性是物件的還是原型的呢?
這個方法叫做:hasOwnProperty
1.hasOwnProperty *****
var obj = {
name : "123",
age : "18",
sex : "male",
height : 180,
weight : 75,
__proto__ : {
lastName : "deng"
}
}
for(var pro in obj){
if(obj.hasOwnProperty(pro)){
console.log(pro + " " + obj[pro]);
}
}
是不是就可以了。
hasOwnProperty就是判斷屬性 是不是自己的。