对象的枚举(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就是判断属性 是不是自己的。

 

 

猜你喜欢

转载自blog.csdn.net/hdq1745/article/details/83216775