Javascript for-in第二弹-与Object.keys()区别

上一回我们对比了for-in与forEach(其实是辨别),这次说说和Object.keys()的区别。

对于for-inObject.keys(),先看以下代码:

function Person() {
}

Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
    console.log(this.name);
}

var people1 = new Person();

for (var prop in people1) {
    console.log(prop);
}

var keys = Object.keys(Person.prototype);
console.log(keys);

people1.name = "Rob";
people1.age = 31;
var p1keys = Object.keys(people1);
console.log(p1keys);

输出结果为:

name
age
job
sayName
[ 'name', 'age', 'job', 'sayName' ]
[ 'name', 'age' ]

感受一下,关于for (var prop in people1),找出了原型中的属性和方法,完全展示出来(如果想不设置对象,需要使用Person.prototype来代替people1,两者输出相同)

而针对Object.keys(),两者却有着不同的表现。这让人想到了一个属性是存在于原型还是存在于实例的问题,换言之输出存在于那里的属性和方法。

另:检验存在位置可以用person1.hasOwnProperty("name")和`"name" in person1"来检验。

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 语法

添加新评论