hasOwnProperty,in

Posted 晨落梦公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hasOwnProperty,in相关的知识,希望对你有一定的参考价值。

hasOwnProperty,in区别:

  hasOwnProperty:指出一个对象是否具有指定名称的属性

  in:对象是否能够访问此属性(包括直接在对象上访问和通过原型访问)

看下示例代码:

(function () {

    function Person() {
    }

    var p = Person.prototype;
    p.name = "晨落梦公子";
    p.age = 24;
    var person1 = new Person();
    console.log(person1.hasOwnProperty("name")); // false
    console.log("name" in person1); //true
})();

补充两行代码

    person1.name = "meng";
    console.log(person1.hasOwnProperty("name")); //true

利用两者的区别我们可以:判断该属性是存在于对象中还是原型中。

判断过程,先in如果为true,说明当前对象的父类有此属性,再用hasOwnProperty,true则表示他具有此属性,false就表示他还没有为此属性赋值。

巧记:hasOwnProperty,hasOwn嘛,就是表示他自己是否有此属性。

   in,在什么里面,当前屋子里面沙发上有的东西也可以说成此屋子有此东西。


根据以上的思路自己衍生方法,目的是实现,判断对象是否有此原型方法

Object.prototype.hasPrototypeProperty=function ( pro) {
        return !this.hasOwnProperty(pro) && (pro in this);
    };

代码应用(person1声明同上)

    console.log(person1.hasPrototypeProperty("name")); //true

    person1.name = "晨落梦公子";
    console.log(person1.hasPrototypeProperty("name")); //false

从应用中可以看出,该方法效果,如果当前对象是原型上的方法则返回true,自己本身声明此属性后则返回false。

以上是关于hasOwnProperty,in的主要内容,如果未能解决你的问题,请参考以下文章

for in 与 Object.keys 与 hasOwnProperty区别

for..in 和 hasOwnProperty [重复]

javascript中in和hasOwnProperty区别

JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

对象是否拥有某个属性,in和for in以及object.hasOwnProperty('×××')的异同,以及Object.defineProperty

巧记 In/hasOwnProperty/for…in/for…of/forEach区别