for 循环
let arr = [1,2,3]; for (let i=0; i<arr.length; i++){ console.log(i,arr[i]) } // 0 1 // 1 2 // 2 3
for in 循环
let obj = {name:'zhou',age:'**'} for(let i in obj){ console.log(i,obj[i]) } // name zhou // age ** for in 循环主要用于遍历普通对象,i 代表对象的 key 值,obj[i] 代表对应的 value。
for of 循环
let arr = ['name','age']; for(let i of arr){ console.log(i) } // name // age for of 循环是 Es6 中新增的语句,用来替代 for in 和 forEach,它允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代(Iterable data)的数据结构,注意它的兼容性。
while 循环
cars=["BMW","Volvo","Saab","Ford"]; var i=0; while (cars[i]) { console.log(cars[i] + "<br>") i++; };
do while 循环
let i = 3; do{ console.log(i) i--; }while(i>0) // 3 // 2 // 1
Array forEach 循环
let arr = [1,2,3]; arr.forEach(function(i,index){ console.log(i,index) }) // 1 0 // 2 1 // 3 2
Array map()方法
let arr = [1,2,3]; let tt = arr.map(function(i){ console.log(i) return i*2; }) // [2,4,6] map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 注意:map 和 forEach 方法都是只能用来遍历数组,不能用来遍历普通对象。 map: 一定遍历全部数据,不能通过return结束,消耗性能,不要常用。 常用于转换数据结构,比forEach快。
Array filter()
let arr = [1,2,3]; let tt = arr.filter(function(i){ return i>1; }) // [2,3] filter 方法是 Array 对象内置方法,它会返回通过过滤的元素,不改变原来的数组。
Array some() 方法
let arr = [1,2,3]; let tt = arr.some(function(i){ return i>1; }) // true some() 方法用于检测数组中的元素是否满足指定条件(函数提供), 返回 boolean 值,不改变原数组。 注意:some() 中只要有一项满足条件则返回 true
Array every() 方法
let arr = [1,2,3]; let tt = arr.every(function(i){ return i>1; }) // false every() 方法用于检测数组中的元素是否满足指定条件(函数提供), 返回 boolean 值,不改变原数组。 注意:every() 中所有项满足条件 才会返回 true
Array reduce()方法
let arr = [1,2,3]; let ad = arr.reduce(function(i,j){ return i+j; })// 6 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
Array reduceRight()方法
let arr = [1,2,3]; let ad = arr.reduceRight(function(i,j){ return i+j; }) // 6 reduceRight()方法,和 reduce() 功能是一样的,它是从数组的末尾处向前开始计算。
while和do–while循环的主要区别如下:
1、循环结构的表达式不同 while循环结构的表达式为:while(表达式){循环体}。 do-while循环结构表达式为:do{循环体;}while (条件表达);。 2、执行时判断方式不同 while循环执行时只有当满足条件时才会进入循环,进入循环后,执行完循环体内全部语句至当条件不满足时,再跳出循环。 do-while循环将先运行一次,在经过第一次do循环后,执行完一次后检查条件表达式的值是否成立,其值为不成立时而会退出循环。 3、执行次数不同 while循环是先判断后执行,如果判断条件不成立可以不执行中间循环体。 do-while循环是先执行后判断,执行次数至少为一次,执行一次后判断条件是否成立,如果不成立跳出循环,成立则继续运行循环体。 4、执行末尾循环体的顺序不同 while循环的末尾循环体也是在中间循环体里,并在中间循环体中执行,循环体是否继续运行的条件也在循环体中。 do-while循环是在中间循环体中加入末尾循环体,并在执行中间循环体时执行末尾循环体,循环体是否继续运行的条件在末尾循环体里。 7、find和findindex是 查找,find 找到一个就返回 符合条件的数据,findIndex找到一个返回符合条件的下标,find找不到返回undefined,findindex找不到返回-1。 const Arr=[1,2,3]; let num=Arr.find((x)=> x > 2); console.log(num); // 3 const Arr=[1,2,3]; let num=Arr.findIndex((x)=> x > 2); console.log(num); // 2
reduce
作用:对数组进行迭代,然后两两进行操作,最后返回一个值 返回值:return出来的结果 是否改变原有数组:否 var arr = [1,2,3] var ret = arr.reduce(function(a,b){ return a*b;}) console.log(ret);// 6 console.log(arr)// [1,2,3]
reduceRight
作用:对数组进行迭代,然后两两进行操作, 从右往左对数组的元素进行两两操作,把每次操作的结果当做下次比较的前者,重复这样的操作,直到最后返回一个值 返回值:return出来的结果 是否改变原有数组:否 var arr = [1,2,6] var ret = arr.reduce(function(a,b){ return a*b; }) console.log(ret);// 12 console.log(arr) // [1,2,3]
Let和var的区别:
1,var是最近的函数作用域,let的作用域是最接近的块作用域,这个比函数的作用域要小。 2、当他们是全局变量时,let和var是相同的。当他们处在一个函数内,也是相同的。 3.var定义以后可以修改,不初始化会输出undefined,不会报错。let未定义就输出则会报错直接报错:ReferenceError: letTest is not defined 4、如果在函数的for里面定义,let只在这个for里面有效。var是在整个函数里面有效。 5、重复声明一个变量时。var会覆盖上一个变量的赋值,而let则会报错你已经定义过了。