对象枚举
枚举其实就是遍历(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