概念
hasOwnProperty是Object基类原型上的方法,用于判断某个对象中是否含有自定义属性,而不是原型链上内置的属性
var obj = {
a:undefined,
b:12
}
obj.a;//undefined
obj.c;//undefined
'toString' in obj; // true
obj.hasOwnProperty('toString') // false
toString并不是obj自定义的属性而是通过obj.__proto__顺着原型链向下查找,在基类的原型上存在的方法
in 某个属性是否属于某个对象; 某个对象.某个属性;不能判断出 该属性是否是内置的 还是自定义的
for in 循环 遍历对象属性
var obj2 = {
name:'ff',
age:19
}
for(var key in obj){
console.log(key);
}
for in 循环也可以用来循环数组,但是会把所有能调用到的自己添加的属性 全部获取到;遍历出来的数组的属性(内置索引+自定义的属性)不是我们想要的
var ary = [1,2,3,4,5]
ary.qqq = 123;
Array.prototype.a = 100;
Object.prototype.b = 200;
for(var k in ary){
// 会把所有能调用到的自己添加的属性 全部获取到0,1,2,3,4,qqq
console.log(k)
};
对象自定义一个同名的hasOwnproperty属性
var obj3 = {
hasOwnproperty:function(){
},
tips:'自定义的'
}
obj3.hasOwnProperty(tips);//obj3里自定义的,不是我们想要的 会出错
({}).hasOwnProper.call(obj3,tips);//调动基类原型上的hasOwnProperty方法,并把this指向自改为obj3;