Javascript for-in第二弹-与Object.keys()区别
上一回我们对比了for-in与forEach(其实是辨别),这次说说和
Object.keys()
的区别。
对于for-in
和Object.keys()
,先看以下代码:
1function Person() {
2}
3
4Person.prototype.name = "Nicholas";
5Person.prototype.age = 29;
6Person.prototype.job = "Software Engineer";
7Person.prototype.sayName = function() {
8 console.log(this.name);
9}
10
11var people1 = new Person();
12
13for (var prop in people1) {
14 console.log(prop);
15}
16
17var keys = Object.keys(Person.prototype);
18console.log(keys);
19
20people1.name = "Rob";
21people1.age = 31;
22var p1keys = Object.keys(people1);
23console.log(p1keys);
24
输出结果为:
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"来检验。
评论 (0)