JS 循环遍历 总结

1、循环遍历语句

for...in... (ES5)

语法javascript for(keys in obj){}
适用:遍历对象
说明
  1.keys表示obj对象的每个键值对的键(键名),全部循环中,须要使用obj[keys]来取到每个值。
  2.for-in 循环,遍历时不只能读取对象自身上面的成员属性,也能延续原型链遍历出对象的原型属性
  3.使用hasOwnProperty判断一个属性是否是对象自身上的属性。obj.hasOwnProperty(keys)==true 表示这个属性是对象的成员属性,而不是原型属性javascript

for...of... (ES6)

语法javascript for(keys of xxx){}
适用:数组、Set和Map结构、某些相似数组的对象(好比arguments对象、DOM NodeList 对象)、Generator 对象,以及字符串
说明:ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,做为遍历全部数据结构的统一的方法。
 一个数据结构只要部署了Symbol.iterator属性,就被视为具备iterator接口,就能够用for...of循环遍历它的成员。
也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。
 
其余
for (let [key,value] of Object.entries(obj))
for (let key of Object.keys(obj))
for (let key of Object.values(obj))java

1.Object.keys()
返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历( enumerable )属性的键名es6

2.Object.values()
返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历( enumerable )属性的键值数组

3.Object.entries()
返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历( enumerable )属性的键值对数组数据结构

forEach (ES5)

语法javascript [].forEach(callbackfn[, thisArg])
适用: 遍历数组,不改变原数组
说明:对数组里存在的每一个元素调用一次 callbackfn。callbackfn 只被实际存在的数组元素调用;它不会被缺乏的数组元素调用。
若是提供了一个 thisArg 参数,它会被看成 this 值传给每一个 callbackfn 调用。若是没提供它,用 undefined 替代。函数

callbackfn参数,分别为值、下标、数组自己this

[].forEach(function(value, index, array) {
    // ...
});

对比jQuery中的$.each方法:es5

$.each([], function(index, value, array) {
    // ...
});

缺点:设计

  1. 不能使用break语句中断循环
  2. 不能使用return语句返回到外层函数

map (ES5)

语法javascript [].map(callbackfn[, thisArg]);
说明:map方法能够返回一个处理过的新数组,不改变原数组code

callbackfn参数,分别为值、下标、数组自己

[].map(function(value, index, array) {
  // ...
  return .....
});

2、比较

for...in缺点

  ①数组的键名是数字,可是for...in循环是以字符串做为键名“0”、“1”、“2”等等。
  ②不只遍历数字键名,还会遍历手动添加的其余键,甚至包括原型链上的键。
  ③某些状况下,会以任意顺序遍历键名,主要是为遍历对象而设计的,不适用于遍历数组。

for...of优势

  ①有着同for...in同样的简洁语法,可是没有for...in那些缺点。
  ②不一样于forEach方法,它能够与break、continue和return配合使用。
  ③提供了遍历全部数据结构的统一操做接口。

3、循环控制语句

一、break:跳出本层循环,继续执行循环结构后面的语句。若是循环有多层,则break只能跳出一层。

二、continue:跳过本次循环剩余的代码,跳转到表达式处进行下一次的循环判断,继续执行下一次循环。
   ①对与for循环,continue以后执行的语句,是循环变量更新语句i++;
   ②对于while、do-while循环,continue以后执行的语句,是循环条件判断;
   所以,使用这两个循环时,必须将continue放到i++以后使用,不然,continue将跳过i++进入死循环

三、return:在程序(函数)中遇到return语句,那么代码就退出该函数的执行,返回到函数的调用处;若是是主程序(main()),那么结束整个程序的运行。

四、exit: 其余语言中使用,如C、C++等。调用exit()函数将会结束当前进程,同时删除子进程所占用的内存空间,把返回信息传给父进程。 当exit()中的参数为0时,表示正常退出,其余返回值表示非正常退出,执行exit()函数意味着进程结束; 而return仅表示调用堆栈的返回,其做用是返回函数值,而且退出当前执行的函数体,返回到函数的调用处, 在main()函数中, return n和exit(n)是等价的。

相关文章
相关标签/搜索