for、for…in、for…of、forEach的用法及区别
for…of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合。但是不能遍历对象,因为没有迭代器对象。与forEach()不同的是,他可以正确响应break、continue、return语句
for…of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for…in循环(这也是它的本职工作)或内建的Object.keys()方法
for…in遍历的是数组的索引(即键名),而for…of遍历的是数组元素值,for…of遍历的只是数组中的元素,而不包括数组的原型属性method和索引name。
forEach(value/index/Array)不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break、continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数。
forEach和for当循环遍历为空的数组时,forEach会跳过为空的值,for不会跳过为空的数据,会直接显示undefined,两者都能识别出NULL
forEach()
被调用时,不会改变原数组,也就是调用它的数组
具体区别如下:
For
var arrList = [1,2,3,4,5,6]
for(var i = 0;i < arrList.length ; i++){
console.log(arrList[i]);
}
For…in
语法:
for (variable in object)
statement
-
variable:在每次迭代时,variable会被赋值为不同的属性名。
-
object:非Symbol类型的可枚举属性被迭代的对象。
描述
for...in
循环只遍历可枚举属性(包括它的原型链上的可枚举属性)。像 Array
和 Object
使用内置构造函数所创建的对象都会继承自Object.prototype
和String.prototype
的不可枚举属性,例如 String
的 indexOf()
方法或 Object
的toString()
方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
举例
/*
FOR..IN语句遍历数组
*/
Array.prototype.method=function