ES6躬行记(19)——生成器】的更多相关文章

古语云:“纸上得来终觉浅,绝知此事要躬行”.的确,不管看了多少本书,如果自己不实践,那么就很难领会其中的精髓.自己研读过许多ES6相关的书籍和资料,平时工作中也会用到,但在用到时经常需要上搜索引擎中查询相关知识概念,并且对很多知识也仅仅是略知一二,没有领会到其中的原理.为此,开辟了<ES6躬行记>系列,将ES6相关的知识系统的记录下来,以便自己翻阅,也希望能帮助到广大网友. 在ES6之前的版本中,用于声明变量的关键字只有var,并且没有块级作用域,只有函数作用域和全局作用域,但在ES6中已改变…
ES6躬行记(18)--迭代器 要实现以下接口## next() ,return,throw 可以用for-of保证迭代对象的正确性 例如 var str = "向…
根据ES6制订的标准自定义迭代器实现起来比较复杂,因此ES6又引入了生成器的概念,生成器(Generator)是一个能直接创建并返回迭代器的特殊函数,可将其赋给可迭代对象的Symbol.iterator属性.与普通函数不同,生成器不仅可以暂停函数内部的执行(即维护内部的状态),在声明时还需要包含一个星号(*),并且拥有next().return()和throw()三个迭代器方法. 一.function* 生成器在声明时,需要把星号加到function关键字与函数名之间,但ES6没有规定星号两边是…
ES6的继承依然是基于原型的继承,但语法更为简洁清晰.通过一个extends关键字,就能描述两个类之间的继承关系(如下代码所示),在此关键字之前的Man是子类(即派生类),而在其之后的People是父类(即基类或超类). class People { constructor() { this.age = 28; } getAge() { return this.age; } static getName() { return "strick"; } } class Man extend…
ES6正式将类(Class)的概念在语法层面标准化,今后不必再用构造函数模拟类的行为.而ES6引入的类本质上只是个语法糖(即代码更为简洁.语义更为清晰),其大部分功能(例如继承.封装和复用等)均可在ES5中实现,只不过现在能用更符合面向对象的语法来操作类.但诸如接口.protected修饰符等一些面向对象常用的语法,ES6没有给出相关标准. 一.创建 在ES5时代,可以像下面这样模拟一个类,先声明一个构造函数,然后在其原型上定义共享的方法,最后与new运算符组合实例化一个类. function…
ES6将迭代器和生成器内置到语言中,不仅简化了数据处理和集合操作,还弥补了for.while等普通循环的不足,例如难以遍历无穷集合或自定义的树结构等. 迭代器(Iterator)是一种用于迭代的对象,可有序的依次访问集合中的数据项.ES6制订了一套标准化的迭代器接口(包含3个方法,如表11所列),只要实现了这套接口都能成为迭代器. 表11 迭代器接口 方法 返回值 描述 next() IteratorResult 必选,获取下一个迭代器结果 return() IteratorResult 可选,…
类型化数组(Typed Array)是一种处理二进制数据的特殊数组,它可像C语言那样直接操纵字节,不过得先用ArrayBuffer对象创建数组缓冲区(Array Buffer),再映射到指定格式的视图(view)之后,才能读写其中的数据.总共有两类视图,分别是特定类型的TypedArray和通用类型的DataView.在ES6引入类型化数组之后,大大提升了JavaScript数学运算的性能. 一.ArrayBuffer 虽然ArrayBuffer对象可以开辟一片固定大小的内存区域(即数组缓冲区)…
解构(destructuring)是一种赋值语法,可从数组中提取元素或从对象中提取属性,将其值赋给对应的变量或另一个对象的属性.解构地目的是简化提取数据的过程,增强代码的可读性.有两种解构语法,分别是数组解构和对象解构,两者的区别在于解构赋值语句的左侧,前者是数组字面量,而后者是对象字面量.为了说明解构的优势,下面用一个例子来对比手动赋值和解构赋值. var arr = [1, 2], obj = { a: 3, b: 4 }, x, y, a, b; x = arr[0]; y = arr[1…
在ES6之前,由于ECMAScript不具备模块化管理的能力,因此往往需要借助第三方类库(例如遵守AMD规范的RequireJS或遵循CMD规范的SeaJS等)才能实现模块加载.而自从ES6引入了模块化标准后,就不需要再特地加载一次外部脚本了.模块化的语法不仅让JavaScript代码的组织变得更有条理,还包含封装.按需导出或导入等实用功能,可轻松应对日益复杂和庞大的前端工程.但有一点要注意,模块中的代码默认运行在严格模式中. 一.导出 一个模块就是一个独立的JavaScript文件,如果要读取…
模板字面量(Template Literal)是一种能够嵌入表达式的格式化字符串,有别于普通字符串,它使用反引号(`)包裹字符序列,而不是双引号或单引号.模板字面量包含特定形式的占位符(${expression}),由美元符号.大括号以及合法的表达式组成,合法的表达式(expression)可以是变量.算术或函数调用,甚至还可以是模板字面量.在ES6引入模板字面量后,就能避免用若干个加号来实现字符串拼接,而改用更为优雅的语法来替代,下面用新旧两种方式分别来组合字符串. var name = "s…