for each in 与for in与for of
Posted shjnb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for each in 与for in与for of相关的知识,希望对你有一定的参考价值。
1.for each in
语法:
for each (variable in object) { statement }
参数:
variable
- 用来遍历属性值的变量,前面的
var
关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
object
- 该对象的属性值会被遍历.
statement
- 遍历属性值时执行的语句. 如果想要执行多条语句, 请用(
{ ... }
) 将多条语句括住. - 实例:
var sum = 0; var obj = {prop1: 5, prop2: 13, prop3: 8}; for each (var item in obj) { sum += item; } print(sum); // 输出"26",也就是5+13+8的值
2.for in
语法:for (variable in object) {...}
variable
- 在每次迭代时,将不同的属性名分配给变量。
object
- 被迭代枚举其属性的对象。
- 描述:
-
for...in
循环只遍历可枚举属性。像Array
和Object
使用内置构造函数所创建的对象都会继承自Object.prototype
和String.prototype
的不可枚举属性,例如String
的indexOf()
方法或Object
的toString()
方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。删除,添加或者修改属性
for...in
循环以任意序迭代一个对象的属性(请参阅delete
运算符,了解为什么不能依赖于迭代的表面有序性,至少在跨浏览器设置中)。如果一个属性在一次迭代中被修改,在稍后被访问,其在循环中的值是其在稍后时间的值。一个在被访问之前已经被删除的属性将不会在之后被访问。在迭代进行时被添加到对象的属性,可能在之后的迭代被访问,也可能被忽略。通常,在迭代过程中最好不要在对象上进行添加、修改或者删除属性的操作,除非是对当前正在被访问的属性。这里并不保证是否一个被添加的属性在迭代过程中会被访问到,不保证一个修改后的属性(除非是正在被访问的)会在修改前或者修改后被访问,不保证一个被删除的属性将会在它被删除之前被访问。3.for of
语法:
for (variable of iterable) { //statements }
variable
- 在每次迭代中,将不同属性的值分配给变量。
iterable
- 被迭代枚举其属性的对象。
- 功能:
for...of
语句在可迭代对象(包括Array
,Map
,Set
,String
,TypedArray
,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。-
示例
迭代
Array
let iterable = [10, 20, 30]; for (let value of iterable) { value += 1; console.log(value); } // 11 // 21 // 31
如果你不想修改语句块中的变量 , 也可以使用
const
代替let
。let iterable = [10, 20, 30]; for (const value of iterable) { console.log(value); } // 10 // 20 // 30
*****其他类型也如此。4.for...of
与for...in
的区别无论是
for...in
还是for...of
语句都是迭代一些东西。它们之间的主要区别在于它们的迭代方式。for...of
语句遍历可迭代对象定义要迭代的数据。
以上是关于for each in 与for in与for of的主要内容,如果未能解决你的问题,请参考以下文章
j-3. .each(),for each ,for of ,for in-------待续
js 跳出for/for in/each/for each 循环