一、ForEach()
forEach()方法对数组的每个元素执行一次给定的函数。
实例代码:
const array1 = ['a', 'b', 'c', 'd']
array1.forEach((item) => {
console.log(item)
})
输出每一个item项:a , b , c , d
参数的解析
item 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象
二、普通for循环遍历
普通for循环遍历。
实例代码:
var a = [1, 2, true, 'b', 'd', 'z', 's'] //定义数组
for (var i = 0; i < a.length; i++) {
//遍历数组
console.log(a[i]) //返回[1,2,true,b,d,z,s]
}
参数的解析
写法:for(开始条件;结束条件;更改条件){循环体}
三、for in 循环遍历
for…in 正式写法为for(i in obj){}.
循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作
实例代码:
var person = { name1: 'Jack', name2: 'Tony', age: 25 } // 定义是个对象
var text = '' // 定义一个空字符串
for (var x in person) { //循环遍历
text += person[x] + '-'
}
console.log(text) //输出:Jack-Tony-25-
参数的解析
obj:表式指定迭代的的对象
i :表式指定的变量可以是数组元素,也可以是对象的属性
四、for of 循环遍历
for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
实例代码:
let iterable = [10, 20, 30];
for (let value of iterable) {
value += 1;
console.log(value); 输出: 11 21 31
}
语法
for ( i of obj ) {
// 处理
}
参数的解析
obj:被迭代枚举其属性的对象
i :在每次迭代中,将不同属性的值分配给变量。
注: for…of与for…in的区别
无论是for…in还是for…of语句都是迭代一些东西。
它们之间的主要区别在于它们的迭代方式。
for…in 语句以任意顺序迭代对象的可枚举属性。
for…of 语句遍历可迭代对象定义要迭代的数据。
实例:
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // logs 0, 1, 2, "foo"
}
}
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
每个对象将继承objCustom属性,并且作为Array的每个对象将继承arrCustom属性,因为将这些属性添加到Object.prototype ()和Array.prototype。由于继承和原型链,对象iterable继承属性objCustom和arrCustom。
此循环仅以原始插入顺序记录iterable 对象的可枚举属性。它不记录数组元素3, 5, 7 或hello,因为这些不是枚举属性。但是它记录了数组索引以及arrCustom和objCustom。
这个循环类似于第一个,但是它使用hasOwnProperty() 来检查,如果找到的枚举属性是对象自己的(不是继承的)。如果是,该属性被记录。记录的属性是0, 1, 2和foo,因为它们是自身的属性(不是继承的)。属性arrCustom和objCustom不会被记录,因为它们是继承的。
该循环迭代并记录iterable作为可迭代对象定义的迭代值,这些是数组元素 3, 5, 7,而不是任何对象的属性。