1、for循环
   
JS常见的循环,常用于循环数组、字符串之类
let arr = [1, 2, 3];
for (let i = 0; i < arr.length; i++) {
    console.log(i, arr[i])
}
// 0 1
// 1 2
// 2 3
    
    
    2、while循环
   
也是JS常见的循环
arr = ["1", "2", "3", "4"];
var i = 0;
while (arr[i]) {
    console.log(arr[i] + "<br>")
    i++;
};
    
    
    3、do while循环
   
此循环是while循环的一个变体,它首先执行一次操作,然后再进行条件判断,是true的话就继续执行操作,否则的话,循环结束
let i = 3;
do {
    console.log(i)
    i--;
}
while (i > 0)
// 3
// 2
// 1
    
    
    4、forEach循环:对数组的每个元素执行一次给定的函数
   
    
     forEach 循环在所有元素调用完毕之前是不能停止的,它没有 break 语句,如果你必须要停止,可以尝试 try catch 语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了,如果你经常用这个方法,最好自定义一个这样的 forEach 函数在你的库里。
    
   
    
    
    (1)语法:
   
arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
    
    
    (2)参数:
   
    
     callback:
    
    为数组中的每个元素执行的函数,该函数接收
    
     1~3个参数
    
    :
   
	currentValue :  数组中正在处理的当前元素
	index(可选) :数组中正在处理的当前元素的索引
	array(可选):forEach()方法正在操作的数组,即当前正在调用的数组
    
     thisArg(可选):
    
    当执行回调函数callback时,用作this的值
   
    
    
    (3)返回值 :undefined
   
    
    
    (4)forEach会改变原数组吗?
   
    
    
    5、for in循环:以任意的顺序遍历一个对象的除Symbol以外的可枚举的属性
   
    
    
    (1)语法:
   
for(variable in object)
    
    
    (2)参数:
   
variable:	在每次迭代的时候,variable会被赋值为不同的属性名
object:非Symbol类型的可枚举属性被迭代的对象
    
    
    (3)注意:
   
for…in…不应该用于迭代于一个关注于索引顺序的Array,它是为遍历对象而构建的
    
    
    6、for of 循环:for…of语句在可迭代的对象(包括Array,Map,set,String,TypedArray,arguments对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个属性的值执行语句
   
    
     0
    
   
    
    
    (1)语法:
   
for (variable of iterable) {}
    
    
    (2)参数:
   
variable: 在每次迭代中,将不同属性的值分配给变量
iterable:被迭代枚举其属性的对象
    
    
    (3)示例:
   
// 迭代Array
let iterable = [10,20,30]
for(let value of iterable) {
    value += 1
    console.log(value);//11   21    31
}
console.log(iterable); //[10,20,30]
//并不改变原数组
//迭代String
let iterable = 'boo'
for(let value of iterable) {
    console.log(value); // b o o
}
console.log(iterable); //boo
    
    
    (4)for…of 与 for…in的区别
   
它们之间的主要区别在于它们的迭代方式
for…in语句以任意顺序迭代对象的可枚举属性
for…of语句遍历可迭代对象定义要迭代的数据
    
    
    7、map():方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
   
    
    
    (1)注意:
   
map()不会对空数组进行检测
map()不会改变原始数组
    
    
    (2)语法:array.map(function(currentValue,index,arr), thisValue)
   
function(currentValue,index,arr):
	函数,数组中的每个元素都会执行这个函数
	函数参数:  currentValue:当前元素的值
						index:当前元素的索引值
						arr:当前元素属于的数组对象
thisValue:对象作为该回调时使用,传递给函数,用作"this"的值,如果省略了thisValue,或者传入null、undefined,那么回调函数的this为全局对象
    
    
    (3)返回值
   
返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
    
    
    8、filter():创建一个新数组,其中包含通过所提供函数实现测试的所有元素
   
    
    
    (1)语法:var newArray = arr.filter(callback(element[,index[,array]])[,thisArg])
   
callback:
	用来测试数组中的每个元素的函数;返回true表示该元素通过测试,保留该元素,false则不保留。他接受三个参数:
		element:数组中当前正在处理的元素。
		index:正在处理元素在数组中的索引
		array:调用了filter的数组本身
thisArg:
	执行callback时,用于this的值
    
    
    (2)返回值:
   
一个新的、由通过测试的元素组成的数组,如果没有任何元素通过测试,则返回空数组
    
    
    9、some():测试数组中是不是至少有一个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值
   
    
    
    (1)注意:
   
如果用一个空数组进行测试,在任何情况下它返回的都是false
    
    
    (2)语法:arr.some(callback(element[, index[, array]])[, thisArg])
   
callback:用来测试每个元素的函数,接受三个参数:
	element:数组中正在处理的元素
	index:数组中正在处理的元素的索引值
	array:some()被调用的数组
	
thisArg:执行callback时使用的this值
    
    
    (3)返回值:
   
数组中至少有一个元素通过回调函数的测试就会返回true,所有元素都没有通过回调函数的测试返回值才会为false
    
    
    10、every():测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值
   
    
    
    (1)注意:
   
若收到一个空数组,此方法在一切情况下都会返回true
    
    
    (2)语法:arr.every(callback(element[, index[, array]])[, thisArg])
   
callback:用来测试每个元素的函数,它可以接收三个参数:
	element:用于测试当前值
	index:用于测试当前值的索引
	array:调用every的当前数组
thisArg:执行callback时使用的this值
    
    
    (3)返回值
   
如果回调函数的每一次返回都为truthy值,返回true,否则返回false
    
    
    11、reduce():对数组中的每个元素执行一个由你提供的reducer函数(升序执行),将其结果汇总为单个返回值
   
    
    
    (1)语法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
   
callback:执行数组中的每个值(如果没有提供initaValue)的函数,包含四个参数:
	accmulator:累计器累计回调的返回值;它是上一次调用回调时返回的累积值
	currentValue:数组中处理的元素
	index:数组中正在处理的当前元素的索引。如果提供了initialValue,则起始索引号为0,否则从索引1起始
	array:调用reduce()的数组
    
    
    (2)返回值:
   
函数累计处理的结果
    
    
    12、reduceRight():方法接受一个函数作为累加器和数组的每个值(从右到左)将其减少为单个值
   
    
    
    (1)语法:arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
   
callback:一个回调函数,用于操作数组中的每个元素,它可接受四个参数:
	accumulator:累加器,上一次调用回调函数时,回调函数返回的值。首次调用回调函数时,如果initiaValue存在,累加器即为initiaValue,否则须为数组中的最后一个元素
	currentValue:当前元素,当前被处理的元素
	index:数组中当前被处理的元素的索引
	array:调用reduceRight()的数组
initialValue:首次调用 callback 函数时,累加器 accumulator 的值。如果未提供该初始值,则将使用数组中的最后一个元素,并跳过该元素。如果不给出初始值,则需保证数组不为空
    
    
    (2)返回值:执行之后的返回值
   
 
