一、for in遍历数组的问题
1、index索引为字符串类型,不能直接进行几何运算
2、遍历顺序可能不是按照实际数组的顺序
3、会遍历数组所有的可枚举属性,包括原型
Array.prototype.method = function () {
console.log(this.length);
}
var myArray = [1, 2, 4, 5, 6, 7]
myArray.name = "数组";
for (var key in myArray) {
console.log(key, myArray[key]);
}
for (var value of myArray) {
console.log(value);
}
for in遍历的是数组的索引,for of遍历的是数组元素值。
二、遍历对象
遍历对象通常使用for in
Object.prototype.method = function () {
console.log(this);
}
var myObject = {
a: 1,
b: 2,
c: 3
}
for (var key in myObject) {
console.log(key);
}```
for in 可以遍历到原型对象上的方法,如果不想遍历原型对象上的方法和属性,需要在循环内部判断一下。hasOwnProperty方法可以判断某属性是否是该对象的实例属性
```javascript
for (var key in myObject) {
if (myObject.hasOwnProperty(key)) {
console.log(key);
}
}
三、for of特点
1、for of不可以遍历对象,但是可以通过以下方法遍历对象:使用Object.keys()获取对象的key值集合后,再使用for of
const obj = {
a: 1,
b: 2,
c: 3
}
for (let i of Object.keys(obj)) {
console.log(i)
// 1
// 2
// 3
}
2、一个数据结构只要部署了Symbol.iterator属性,就可以使用for of
具有for of的数据结构有:Array,Map,Set,String,arguments对象,Nodelist对象(获取的dom列表集合)。
3、与forEach不同,for of可以正确响应break,continue,return语句
四、JS数组遍历
1、for循环
2、forEach()
数组自带的循环,主要用于遍历数组。缺点是不能使用break语句中断循环,也不能使用return语句返回到外层函数。
3、map() 用法与forEach()相似,缺点是不能使用break语句中断循环,也不能使用return语句返回到外层函数,但是可以返回值。
arr = [2, 3, 4, 5]
arr.forEach(function (value, i) {
console.log('forEach循环:' + i + '--' + value)
})
arr.map(function (value, i) {
console.log('map:' + i + '--' + value)
})
var temp = arr.map(function (val, index) {
console.log(val);
return val * val
})
console.log(temp);
转载于:https://www.cnblogs.com/zjx304/p/10687017.html 仅用于学习,侵删