对象枚举
枚举其实就是遍历(enumeration)
for in
目的: 遍历对象
语句:for(var 变量名 in 对象)
var obj = {
name : "zhangsan",
sex : 'boy',
age : 18,
}
for(var prop in obj){
console.log(prop + ' ' + typeof(prop) +' '+ obj[prop]);
}
控制台就会遍历打印对象里面的属性名。
这里就要注意一下,在for in 枚举里面不能用 对象名.变量名(obj.prop) 来调用对象的属性值 ;
原因是:对象名.变量名(obj.prop)会隐式 转换成 对象名['变量名'](obj['prop']),此时变量名就会当成对象里面的属性名,所以不能调用出对象中的属性值。
正确写法: 对象名[变量名](obj[prop])
1、has OwnProperty
判断属性是不是自己的, 如果是,返回true;不是,返回false
属于过滤性方法
var obj ={
name : '13',
age : 123,
sex : 'male',
height : 180,
weight : 75,
__proto__ : {
lastName : "deng",
}
}
for(var key in obj){
if(obj.hasOwnProperty(key)){
console.log(obj[key]);
}
}
打印属性值
由此可见,不会输出__proto__因为它不是obj的属性,他指向object的原型对象。
hasOwnProperty 与for in 一般一起使用,过滤掉不是对象中的属性。
2、in
只能判断在这个对象上调用这个属性
用法: (就上个例子)
‘height’in obj ----->打印:true
'lastName' in obj ------>打印:true
3、instanceof
A 对象 是不是 B构造函数构造出来的
看A对象的原型链上 有没有 B的原型
A instanceof B
例如:
function Person() {}
var person = new Person();
console.log(person instanceof Object) ;
打印 : true