JS:对象成员检测(instanceof 、isPrototypeOf 、hasOwnProperty() 、propertyIsEnumerable())

检测对象成员我使用到了以下运算符和方法:

instanceof 、isPrototypeOf 、hasOwnProperty() 、propertyIsEnumerable()

 

1、instanceof

是什么?检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

                
            function  Parent() {};
            function  Child() {};
            var child=new Child();
            console.log(child instanceof Parent); //false 
            console.log(child instanceof Child); //true  


            function  Parent() {};
            function  Child() {};
            Child.prototype=new Parent();
            var child=new Child();
            console.log(child instanceof Parent); //true 
            console.log(child instanceof Child); //true     

学习了原型对象后,理解这个例子:

new Child创建了一个新的对象,那个对象与Child共用一个原型对象,其他同理。

 

2、isPrototypeOf

判断一个对象象是否为一个实例的原型。
            function  Parent() {};
            function  Child() {};
            Child.prototype=new Parent();
            var c1=new Child();        
            console.log(Parent.prototype.isPrototypeOf(c1)); //true
            console.log(Child.prototype.isPrototypeOf(c1)); //true
            console.log(Child.isPrototypeOf(c1));  //false

 

3、hasOwnProperty() 

判断对象是否有某个特定的属性,(注意说的是对象的属性,而不是对象原型的属性)
必须用字符串指定该属性。
           function  Parent() {
                this.life=1;
            }
            function  Child() {    
                this.name="karen";
            }
            Child.prototype=new Parent();
            var c1=new Child();

            console.log(c1.hasOwnProperty("name"));//true 
            console.log(c1.hasOwnProperty("life"));//false           

 

4、propertyIsEnumerable()

判断给定的属性是否可以用 for...in 语句进行枚举。
 
            由于 for ... in 枚举是包含原型链上的属性的,
            但propertyIsEnumerable作用于原型方法上时,始终是返回false的,
            你可以这么认为,for...in可以枚举对象本身的属性和原型上的属性,
            而propertyIsEnumerable只能判断本身的属性是否可以枚举。
 
            此外,预定义的属性不是可列举的,而用户定义的属性总是可列举的。
            所以如果你只想遍历对象本身的属性,可以  
    
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <script>
            var arr = document.querySelectorAll(".box");
            console.log(arr);
            for (var i in arr) {
                //for-in能便历的对象的成员就是可遍历成员
                if (arr.propertyIsEnumerable(i)) {
                    console.log(i);  // [div.box, div.box, div.box, div.box]
                }
            }
            
            var  arr=[10,20,304];
            console.log(arr.propertyIsEnumerable(1));//true
        </script>

 

在条件语句if种使用propertyIsEnumerable()做条件判断

        var obj = {
            name: 'lili',
            age: 10
        };
        for (var key in obj) {
            if (obj.propertyIsEnumerable(key)) {
                console.log(key);    //name age
                console.log(obj[key]);    //lili 10
            }
        }

 

posted on 2022-06-26 16:50  香香鲲  阅读(46)  评论(0编辑  收藏  举报