hasOwnProperty

791 阅读1分钟

概念

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;