前言
一直想写些总结性的文章,事情太多,无从下手,加上太懒,迟迟没有动笔。一天天过去,日积月累的,心头像被压了一层层的稻草,难受极了。不想太多,一件件地做,每做一件就少一件,尽管杂乱繁重,最终总会清空的。
在学习和实践过程中也许会碰到更多的有关遍历的知识,每遇到一点就追加一点,持续更新。现在把能想到的总结下来。
对象的遍历
对象属性的遍历,方法有以下几种
- for…in
- Object.keys()
- Object.getOwnPropertyNames()
1. for…in
for…in是通过in运算符遍历对象中的可枚举属性,包括原型中的属性
// 构造函数中定义私有属性
function Animal(name) {
this.name=name
this.run = function() {
console.log(this.name + ' is running')
}
}
// 定义原型上的共享属性
Animal.prototype.age=12
Animal.prototype.say = function() {
console.log(this.name + ' is saying')
}
// 创建对象,枚举对象中的属性
var animal = new Animal('kikky')
for (prop in animal) {
console.log(prop + ':' + animal[prop])
}
输出结果为:
name:kikky
run:function() {
console.log(this.name + ' is running')
}
age:12
say:function() {
console.log(this.name + ' is saying')
}
通常为了只枚举对象的私有属性,会用一个判断函数hasOwnProperty()来过滤掉原型中的属性。
var animal = new Animal('kikky')
for (prop in animal) {
if (animal.hasOwnProperty(prop)) {
console.log(prop + ':' + animal[prop])
}
}
如果只想枚举对象的私有属性,也可以直接用Object.keys()
。
2. Object.keys()
Object.keys()是构造函数Object的一个方法函数,它获取的是自身属性中的可枚举属性,不包括原型中的属性,返回的是一个包含对象属性名称的数组。
// 构造函数中定义私有属性
function Animal(name) {
this.name=name
this.run = function() {
console.log(