对象的枚举

对象的枚举是指遍历完对象包含的属性,用for循环

var wangjia = {
            wife1: {
                name: "xiaoli"
            },
            wife2: {
                name: "xiaozhao"
            },
            wife3: {
                name: "xiaozhang"
            },
            wife4: {
                name: "xiaowang"
            },
            sayWife: function(num) {
                return this["wife" + num];
            }
        };
        for (var prop in wangjia) {
            console.log(prop);
        }

在这里插入图片描述
将对象里面的属性和方法名都打印出来,但我们还没法知道具体的属性值!

var wangjia = {
            wife1: {
                name: "xiaoli"
            },
            wife2: {
                name: "xiaozhao"
            },
            wife3: {
                name: "xiaozhang"
            },
            wife4: {
                name: "xiaowang"
            },
            sayWife: function(num) {
                return this["wife" + num];
            }
        };
        for (var prop in wangjia) {
            console.log(wangjia.prop);
        }

这里的.操作在后台转换为wangjia[‘prop’],但是对象wangjia 并没有prop属性,所以只会打印5 个 undefined!

var wangjia = {
            wife1: {
                name: "xiaoli"
            },
            wife2: {
                name: "xiaozhao"
            },
            wife3: {
                name: "xiaozhang"
            },
            wife4: {
                name: "xiaowang"
            },
            sayWife: function(num) {
                return this["wife" + num];
            }
        };
        for (var prop in wangjia) {
            console.log(wangjia[prop]);
        }

在这里插入图片描述
只会打印出属性值,没有属性名!所以说要注意区别变量和属性!
但是他会将手动修改的所以属性,包括原型身上的都打印出来!所以引申出一个判断是否在他身上的属性的函数 hasOwnProperty

var wangjia = {
            wife1: {
                name: "xiaoli"
            },
            wife2: {
                name: "xiaozhao"
            },
            wife3: {
                name: "xiaozhang"
            },
            wife4: {
                name: "xiaowang"
            },
            sayWife: function(num) {
                return this["wife" + num];
            },
            __proto__: {
                wa: "uu"
            }
        };
        for (var prop in wangjia) {
            if (!wangjia.hasOwnProperty(prop)) {
                console.log(wangjia[prop]);
            }
        }

在这里插入图片描述确实只打印出原型身上的属性!
在这里插入图片描述
A对象 instanceof B对象 是指A对象是否是B的构造函数构造出来的!这是官方的解释,但是wangjia对象明显不是Object的构造函数,但是他的原型链上有Object的原型!–》所以最后,这个函数准确来说是判断A对象的原型链上是否有B的原型!

区分数组还是对象,var arr = [] || {}?如何判断呢
数组其实算做一种对象!
方法一:他们的constructor不一样!在这里插入图片描述
方法二:既然数组是一种对象,那么数组的原型链上一定有对象的原型
而对象的原型链上没有数组的原型!

方法三:使用Object.prototype.toString.call([])
将[]数组按照Object的原型的toString的方法打印!
在这里插入图片描述

发布了37 篇原创文章 · 获赞 0 · 访问量 700

猜你喜欢

转载自blog.csdn.net/weixin_43704007/article/details/105001781
今日推荐