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就是判断属性 是不是自己的。