10th blog:For each···in / For···in / For···of
1)For each ... in
使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行。作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,for each...in只会被禁用而不会被删除,可以使用ES6中新的for ... of语句来代替。
语法:
for each (variable in object) {
statement
}
参数:
variable:
用来遍历属性值的变量,前面的var
关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
object:
该对象的属性值会被遍历.
statement:
遍历属性值时执行的语句. 如果想要执行多条语句, 请用({ ... }
) 将多条语句括住.
循环形式:
For Each 元素 In 组合
语句1
语句2
语句N
Next [元素]
描述:一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf
方法。不过,大部分的用户自定义属性都是可遍历的。
2)For···in
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
语法:
for (variable in object) {...}
参数:
variable:
在每次迭代时,将不同的属性名分配给变量。
object:
被迭代枚举其属性的对象。
循环形式:
描述:for...in
循环只遍历可枚举属性。像 Array
和 Object
使用内置构造函数所创建的对象都会继承自Object.prototype
和String.prototype
的不可枚举属性,例如Strings的 indexOf()方法或Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
3)For···of
for...of
语句在可迭代对象(包括 Array
,Map
,Set
,String
,TypedArray
,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
语法:
for (variable of iterable) {
//statements
}
参数:
variable:
在每次迭代中,将不同属性的值分配给变量。
iterable:
被迭代枚举其属性的对象。
for与for in的区别:
var array = ['a']
//标准的for循环
for (var i = 1; i < array.length; i++) {
alert(array[i])
}
//for in循环
for (var i in array) {
alert(array[i])
}
-------------------------------------------------------------
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
-------------------------------------------------------------