实现数组遍历
ES4及以前
for (var index = 0; index < myArray.length; index++)
{console.log(myArray[index]);
}
缺点:不简洁
ES5
myArray.forEach(function (value) {
console.log(value)
});
缺点:不能使用break语句中断循环,也不能使用return语句返回到外层函数
ES5
var myArray = ["a","b","c"];
for (var index in myArray) {
console.log(myArray[index]);
}
运行结果
0
1
2
缺点:index拿到的不是"a","b","c",而是索引0,1,2,这其他语言不太一样
再举个🌰
ES5
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
var myArray = ["a","b","c"]
myArray.testKey = "hello"
for (var index in myArray) {
console.log(index)
}
运行结果
0
1
2
testKey
arrCustom
objCustom
缺点:for-in 循环体除了遍历数组元素外,还会便利自定义属性,就连数组原型链上的属性都能被访问到
Tips: for-in 使用范围,for-in常用于遍历对象的属性,不适合数组的遍历
ES6 for-of
var myArray = ["a","b","c"];
for (var value of myArray) {
console.log(value);
}
运行结果
a
b
c
缺点:IE部分浏览器不兼容
优点:除了解决了以上缺点外,还支持Dom NodeList对象,也支持字符串遍历,也支持Map和Set对象遍历
ES6 遍历Set对象
var uniqueWords = new Set(words);
for (var word of uniqueWords) {
console.log(word);
}
ES6 遍历Map,需要用到解构
for (var [key, value] of phoneBookMap) {
console.log(key + "'s phone number is: " + value);
}
ES6 遍历对象属性
for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}
Tips:for-of 更适合迭代器,而for-in更适合遍历对象属性
网友评论