- for循环最常用的是利用索引遍历数组:
var arr = ['Apple', 'Google', 'Microsoft'];
for(var i = 0,i < arr.length; i++) {
x=arr[i];
console.log(x);
}
- for … in可以把一个对象的所有属性依次循环出来:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}
//过滤掉继承的属性,用hasOwnProperty();
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); // 'name', 'age', 'city'
}
}
由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for … in循环可以直接循环出Array的索引
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2'
console.log(a[i]); // 'A', 'B', 'C'
}//,for ... in对Array的循环得到的是String而不是Number
- for of es6推荐,遍历到的是每一个值,无论是对Array,Set,map。
Map类型
js中默认对象的表示方式{},即一组键值对。但是有个问题,js中的键必须是字符串,但实际上Number或其他类型作为键也是合理的。
因此引入了新的数据类型Map。
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
初始化一个空Map。
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
Set类型
Set类型也是一组key的集合,不存储value,Key不重复。
创建Set,key不重复。
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果:
s.add(4);
s; // Set {1, 2, 3, '3',4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, '3',4}
删除值
s.delete(3);
s; // Set {1, 2, '3',4}
**forEach(element,index,Array)**遍历数组中的索引和值。
**forEach(element,key,Map)**遍历Map中的键和值。
**forEach(element,Set)**遍历set中每个值。