js中的循环

while

只要条件为真,就会不断循环执行代码块,先判断条件,条件成立才会执行。

do...while

先运行一次循环体,再判断条件是否成立。

for

可break跳出循环

for...in

可循环数组或者对象,对象i为键名,数组i为索引。
任何对象都继承了Object对象或者其他对象,继承的类的属性默认是可遍历的。
一般不便利数组,无法控制顺序。
for...in遍历数组存在的问题
1】index索引为字符串型数字,不能直接使用;
2】遍历顺序可能无法按照数组的实际顺序;
3】使用for...in会遍历数组所有可枚举属性,包括原型。
因此for...in更适合遍历对象。

for...of

使用for...of循环遍历数组避开了for...in循环的所有缺陷。
与forEach()不同,它可以正确的响应break、continue和return语句。
还可遍历Map和Set。

map()循环

map方法将数组的所有成员依次传入函数参数,然后把每一次执行结果组成一个新数组返回。
不会改变原数组。
map方法接收一个函数作为参数,该函数调用时,map方法向它传递三个参数:当前成员、当前位置和数组本身。
map方法还可以接收第二个参数,用来绑定回调函数内部的this变量,将回调函数内部的this指向第二个参数,间接操作这个参数。

forEach()循环

与map方法类似,也是对数组的所有成员依次执行。参数函数。但是forEach()方法不返回值,只用来操作数据。
参数是一个函数,这个函数同样接收三个参数:当前值、当前位置、整个数组。
forEach循环和map循环一样可以绑定回调函数内部的this变量,间接操作其他变量。
不能使用break跳出循环。

filter()循环

filter()方法用于过滤数组成员,满足条件的成员组成新数组返回。
它的参数是一个函数,所有的数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回,该方法不会改变原数组。
filter()函数参数也可以接收三个参数:当前成员、当前位置、整个数组。
filter()也可以接收第二个参数,用来绑定参数函数内部的this变量。

some()、every()

循环遍历,统计数组是否满足某个条件。
返回一个布尔值,表示判断数组成员是否符合某个条件。接收一个函数作为参数,所有的数组成员依次执行该函数。
该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。

some()方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。当判断出来有一个成员是true,直接break。
every()方法是所有的成员的返回值都是true,整个every()方法才返回true,否则返回false,当遇到一个是false时跳出循环。

reduce()、reduceRight()

依次处理数组中的每个成员,最终累计为一个值。它们的差别是reduce是从左到右,reduceRight是从右到左。
两个方法的第一个参数都是函数。该函数接受以下四个参数:
1】累积变量:默认为数组的第一个成员;
2】当前变量:默认为数组的第二个成员;
3】当前位置;
4】原数组。
第二个参数相当于设置了默认值,处理空数组时尤其有用,可避免一些空指针异常。

Object.keys()、Object.values()、Object.entries()

参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(不是继承)所有属性名,且只返回可枚举属性。

Object.getOwnPropertyNames()

遍历对象属性,与Object.keys()类似,但是它可以返回不可枚举属性,
由于js没有提供计算对象属性个数的方法,所以可以用这两个方法代替。
Object.keys(obj).length;
Object.getOwnPropertyNames(obj).length;

posted @ 2020-07-30 21:48  zhongfang99  阅读(219)  评论(0编辑  收藏  举报