js里面for循环里面的of和in区别


js中的for…in和for…of的区别


for…in 语句用于遍历数组或者对象的属性名称(key:键名) 。 数组中的每个元素的索引被视为属性名称,所以在使用for…in遍历Array时,拿到的是每个元素索引

  • for…in 语句用于对数组或者对象的属性进行循环操作。
  • for … in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
  • for…in语句以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。

for…in 循环只遍历可枚举属性。像 Array和 Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf() 方法或 Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。

数组索引只是具有整数名称的枚举属性,并且与通用对象属性相同。不能保证for … in将以任何特定的顺序返回索引。for … in循环语句将返回所有可枚举属性,包括非整数类型的名称和继承的那些。

因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。因此当迭代访问顺序很重要的数组时,最好用整数索引去进行for循环(或者使用 Array.prototype.forEach() 或 for…of 循环)。

for…of 循环

  • for … of循环是ES6引入的新的语法,用for … of循环遍历集合
  • for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
  • for…of 语句遍历可迭代对象定义要迭代的数据(非自定义属性)
  • for…of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象、Generator 对象,以及字符串。

猜你喜欢

转载自blog.csdn.net/weixin_43611712/article/details/90906522