for each in for in for of
for each...in
使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行.
for each...in
是 ECMA-357 (E4X) 标准的一部分, 大部分非Mozilla浏览器都没有实现该标准, E4X并不是 ECMAScript 标准的一部分.
作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,for each...in只会被禁用而不会被删除,可以使用ES6中新的for...of语句来代替.
语法:
1
2
3
|
for each (variable in object) {
statement
}
|
参数:
-
variable
-
用来遍历属性值的变量,前面的
var
关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
-
object
- 该对象的属性值会被遍历.
-
statement
-
遍历属性值时执行的语句. 如果想要执行多条语句, 请用(
{ ... }
) 将多条语句括住.
一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf
方法.不过,大部分的用户自定义属性都是可遍历的.
警告:永远不要使用for each...in语句遍历数组,仅用来遍历常规对象。
for...in
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
语法:
1
|
for (variable in object) {...}
|
参数:
-
variable
- 在每次迭代时,将不同的属性名分配给变量。
-
object
- 被迭代其枚举属性的对象。
for..in
不应该被用来迭代一个下标顺序很重要的 Array
.
数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。for...in 并不能够保证返回的是按一定顺序的索引,但是它会返回所有可枚举属性,包括非整数名称的和继承的。
因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for
循环 (或者使用 Array.prototype.forEach()
或 for...of
循环) 。
仅迭代自身的属性
如果你只要考虑对象本身的属性,而不是它的原型,那么使用 getOwnPropertyNames()
或执行 hasOwnProperty()
来确定某属性是否是对象本身的属性 (也能使用propertyIsEnumerable
)。另外,如果你知道外部不存在任何的干扰代码,你可以扩展内置原型与检查方法。
1
2
3
4
5
6
7
8
9
10
|
var obj = {a:1, b:2, c:3};
for ( var prop in obj) {
console.log( "obj." + prop + " = " + obj[prop]);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var triangle = {a:1, b:2, c:3};
function ColoredTriangle() {
this .color = "red" ;
}
ColoredTriangle.prototype = triangle;
var obj = new ColoredTriangle();
for ( var prop in obj) {
if ( obj.hasOwnProperty( prop ) ) {
console.log( "o." + prop + " = " + obj[prop]);
}
}
// Output:
// "o.color = red"
|
for...of
ECMAScript 6新方法,使用时参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of
- for...of - 一个相似的语法,用来遍历可迭代对象,有时候效果等同于
for each
...in
语句. - 对于
for...of
的循环,可以由break
,throw
或return
终止。在这些情况下,迭代器关闭。 不要重用生成器
生成器不应该重用,即使
for...of
循环的提前终止,例如通过break
关键字。在退出循环后,生成器关闭,并尝试再次迭代,不会产生任何进一步的结果。
转载于:https://www.cnblogs.com/wwwlinguangcom/p/9932577.html
最新文章
- Errors are values
- 数据挖掘讲座:我所知道的一点Data Mining
- 我是一个喜欢桌游的前端女,跟朋友一起做了个桌游交流系统。在自己的系统里直播开发生活,希望得到更多交流...
- C语言-第8课 - 注释符号
- 区块链以信用为基础,所以目前在中国不可行.
- Linux下串口通信详解
- 如何删除第一张单页_单页网站-网站建设中独有的风景线
- 基于linux的地震数据处理软件的设计与实现,地震数据处理软件系统与应用实验指导书...
- 【Linux 线程】常用线程函数复习《三》
- 得物回应中消协点名批评:感谢监督 涉及案例已处理完结
- java app的强制更新吗_java – Spring JPA / Hibernate事务强制插入而不是更新
- 你是愛我還是需要我?
- [转载] 过 DNF TP 驱动保护
- ICCV 2021 |首届 SoMoF 人体序列预测比赛冠军方案分享
- 自制CPU(三)流水线
- 《血族》全民模式火热开启 南北之战一触即发
- 复选框CheckBox
- ARM Linux对signal的处理过程
- java小程序:阿里巴巴自动登入获取cookie2
- scGEMA:基于单细胞多组学增强子的基因调控网络推断
热门文章
- pr自学教程,为丢失的镜头注入新的活力
- 如何修复 MacBook Pro 电池寿命?
- 如何保持最佳 MacBook 温度?
- 动画交互原型设计:Principle for Mac
- 模组厂商对话 MTK:智能音箱市场谈红海还早,下一个爆品将诞生丨WARE 2018
- 解决Eclipse发布到Tomcat丢失依赖jar包的问题
- 极棒开启AI挑战 全球寻找顶级语音合成“机械师”
- 获取客户端登录ip地址
- 结构-行为-样式-有趣的函数
- 警告: Can't find the request for http://localhost:8080/ibatisSpringDemo/ws/testWS's Observer