// ES5
// 对于数组,使用标准的 for 循环,其实这种方式并不是在遍历值,而是遍历下标来指向值!ES5中增加了一些数组迭代器:forEach、every、some
// forEach:遍历数组中的所有值并忽略回调函数的返回值
// every:一直运行直到回调函数返回 false
// some:一直运行直到回调函数返回 true
// 对于对象, for..in 循环实际上遍历的是对象的可枚举属性列表(包括原型链)需要手动获取属性值
// 手动实现一个类似内置迭代器的 @@iterator
var myObject = {
a: 2,
b: 3
}; Object.defineProperty( myObject, Symbol.iterator, {
enumerable: false,
writable: false,
configurable: true,
value: function() {
var o = this;
var idx = 0;
var ks = Object.keys( o ); return {
next: function() {
return {
value: o[ks[idx++]],
done: (idx > ks.length)
};
}
};
}
} ); // 手动遍历 myObject
var it = myObject[Symbol.iterator](); console.log(it.next()); // { done: false, value: 2 }
console.log(it.next()); // { done: false, value: 3 }
console.log(it.next()); // { done: true, value: undefined } // ES6
// 使用 for..of 遍历数据结构(数组、对象等等)中的值,它会使用内置的 @@iterator 对象并调用它的 next 方法来遍历数据值
for (var v of myObject) {
console.log(v);
}

Object value iterator:值迭代器的更多相关文章

  1. 设计模式之美:Iterator(迭代器)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Iterator 模式结构样式代码. 实现方式(二):实现 IEnumerable 中序遍历二叉树. 实现方式(三):实现 Bi ...

  2. Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口

    Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器 ...

  3. Iterator接口(迭代器)

    目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...

  4. STL源码分析-iterator(迭代器)

    1. GOF 迭代器设计模式 前面一篇文章有写到stl_list的实现,也实现了一下相应的iterator,但是后面觉得,实现具体容器之前有必要介绍一下iterator(迭代器) .那么迭代器是什么呢 ...

  5. Set,Multiset,Iterator(迭代器)详解

    Set,Multiset,Iterator(迭代器) Iterator:迭代器 我们可以发现所谓一些数据结构比如说数组和链表,它们都有一些相似的性质.我们看下面两个例子: 数组:定义数组\(int~a ...

  6. Iterator接口(迭代器)的使用

    Iterator接口(迭代器) 前言 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是Java集合中的一 ...

  7. [LeetCode] Peeking Iterator 顶端迭代器

    Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ...

  8. iterator 及 迭代器模式(转发)

    Iterator definitions An iterator is any object that, pointing to some element in a range of elements ...

  9. PHP:Iterator(迭代器)接口和生成器

    迭代器 可在内部迭代自己的外部迭代器或类的接口.详情:http://php.net/manual/zh/class.iterator.php 接口摘要 Iterator extends Travers ...

随机推荐

  1. tensorflow example1

    用tensorflow实现J(w)=w**2-10*w+25的微分结果 import numpy as npimport tensorflow as tf w=tf.Variable(0,dtype= ...

  2. RTTI(运行时类型识别),typeid,dynamic_cast

    dynamic_cast注意: 1.只能应用于指针和引用的转换: 2.要转换的类型中必须包含虚函数: 3.转换成功则返回地址,如果失败则返回NULL: 参见项目:RTTI

  3. JAVA基础知识总结:十二

    一.String类 字符串是一种特殊的对象,一旦被初始化就不能被改变了 字符串常量存储于常量池中 二.StringBuffer类 是一个字符串缓冲区,相当于一个容器 特点 a.可以对字符串进行增加和删 ...

  4. Python全栈开发-Day6-面向对象编程

    本节内容: 面向过程VS面向对象 面向对象编程介绍 类的语法 构造函数.析构函数 私有方法.私有属性 面向对象的特性:封装.继承.多态 1.面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法 ...

  5. ggplot2画图

    早在N年前就听说这个包画图不错,一直没机会用,终于等到了.相比前面trendline这个包的可视化功能强大得多. ggplot2需要使用dataframe,其实就是一个N维数组, install.pa ...

  6. Lab 1-4

    Analyze the file Lab01-04.exe. Questions and Short Answers Upload the Lab01-04.exe file to http://ww ...

  7. javaweb课程信息管理系统

    1.DBUtil包连接数据库 2.Bin包设计成员函数及方法 3.Dao包设计sql语句 4.servlet包增删改查方法 5.service连接servlet 6.设计jsp增删改查页面 7.连接各 ...

  8. VueJs大全;vee-validate(一个验证vue插件), bootstrap-vue, axios简介。

    Vue.js大全(包括依赖,插件,好的指导文章等!)

  9. android -------- Eclipse选择NDK路径时 “Not a valid NDK directory”

    在 Eclipse选择NDK路径时 出现 “Not a valid NDK directory”  这样的错误 解决方式1 在你安装的ndk的主目录下创建一个ndk-build空文件,然后重新打开对话 ...

  10. Fiddler抓包分析

    在Fiddler的web session界面捕获到的HTTP请求如下图所示:   各字段的详细说明已经解释过,这里不再说明.需要注意的是#号列中的图标,每种图标代表不同的相应类型,具体的类型包括:   ...