1. 程式人生 > >物件的列舉(1)-For in與 hasOwnProperty

物件的列舉(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就是判斷屬性 是不是自己的。