随笔分类 - ES6躬行记
ES6躬行记(24)——代理和反射
摘要:代理和反射是ES6新增的两个特性,两者之间是协调合作的关系,它们的具体功能将在接下来的章节中分别讲解。 一、代理 ES6引入代理(Proxy)地目的是拦截对象的内置操作,注入自定义的逻辑,改变对象的默认行为。也就是说,将某些JavaScript内部的操作暴露了出来,给予开发人员更多的权限。这其实是一
阅读全文
ES6躬行记(23)——Promise的静态方法和应用
摘要:一、静态方法 Promise有四个静态方法,分别是resolve()、reject()、all()和race(),本节将着重分析这几个方法的功能和特点。 1)Promise.resolve() 此方法有一个可选的参数,参数的类型会影响它的返回值,具体可分为三种情况(如下所列),其中有两种情况会创建一
阅读全文
ES6躬行记(22)——Promise
摘要:在JavaScript中,回调函数是处理异步编程的常用解决方案,但层层嵌套的回调金字塔(如下代码所示)一直受人诟病,因为不仅在视觉上更加混乱,而且在管理上也更为复杂。 Promise是ES6新增的特性,能更合理的控制和追踪异步操作。它是一个包含状态、可继承的对象,不仅能管理而不是依赖回调,还能以同步
阅读全文
ES6躬行记(21)——类的继承
摘要:ES6的继承依然是基于原型的继承,但语法更为简洁清晰。通过一个extends关键字,就能描述两个类之间的继承关系(如下代码所示),在此关键字之前的Man是子类(即派生类),而在其之后的People是父类(即基类或超类)。 由上面的代码可知,子类能继承父类的静态方法和原型方法,而诸如访问器属性、生成器
阅读全文
ES6躬行记(20)——类
摘要:ES6正式将类(Class)的概念在语法层面标准化,今后不必再用构造函数模拟类的行为。而ES6引入的类本质上只是个语法糖(即代码更为简洁、语义更为清晰),其大部分功能(例如继承、封装和复用等)均可在ES5中实现,只不过现在能用更符合面向对象的语法来操作类。但诸如接口、protected修饰符等一些面
阅读全文
ES6躬行记(19)——生成器
摘要:根据ES6制订的标准自定义迭代器实现起来比较复杂,因此ES6又引入了生成器的概念,生成器(Generator)是一个能直接创建并返回迭代器的特殊函数,可将其赋给可迭代对象的Symbol.iterator属性。与普通函数不同,生成器不仅可以暂停函数内部的执行(即维护内部的状态),在声明时还需要包含一个
阅读全文
ES6躬行记(18)——迭代器
摘要:ES6将迭代器和生成器内置到语言中,不仅简化了数据处理和集合操作,还弥补了for、while等普通循环的不足,例如难以遍历无穷集合或自定义的树结构等。 迭代器(Iterator)是一种用于迭代的对象,可有序的依次访问集合中的数据项。ES6制订了一套标准化的迭代器接口(包含3个方法,如表11所列),只
阅读全文
ES6躬行记(17)——Map
摘要:一、Map Map类似于Object(对象),可用来存储键值对,但需要通过SameValueZero算法保持键的唯一性。与Set一样,在使用之前也得要实例化,如下代码所示,构造函数Map()中的参数也是一个可选的可迭代对象,但此对象得是键值对的集合或两列的二维数组。 1)属性和方法 Map比Set多
阅读全文
ES6躬行记(16)——Set
摘要:ES6引入了两种新的数据结构:Set和Map。Set是一组值的集合,其中值不能重复;Map(也叫字典)是一组键值对的集合,其中键不能重复。Set和Map都由哈希表(Hash Table)实现,并可按添加时候的顺序枚举。 一、Set Set类似于Array(数组),但需要通过SameValueZero
阅读全文
ES6躬行记(15)——箭头函数和尾调用优化
摘要:一、箭头函数 箭头函数(Arrow Function)是ES6提供的一个很实用的新功能,与普通函数相比,不但在语法上更为简洁,而且在使用时也有更多注意点,下面列出了其中的三点: (1)由于不能作为构造函数,因此也就没有元属性(new.target)和原型(prototype属性)。 (2)函数体内不
阅读全文
ES6躬行记(14)——函数
摘要:在前面的章节中,已陆陆续续介绍了ES6为改良函数而引入的几个新特性,本章将会继续讲解ES6对函数的其余改进,包括默认参数、元属性、块级函数和箭头函数等。 一、默认参数 在ES5时代,只能在函数体中定义参数的默认值,而自从ES6引入了默认参数(Default Parameter)后,就能让参数在声明时
阅读全文
ES6躬行记(13)——类型化数组
摘要:类型化数组(Typed Array)是一种处理二进制数据的特殊数组,它可像C语言那样直接操纵字节,不过得先用ArrayBuffer对象创建数组缓冲区(Array Buffer),再映射到指定格式的视图(view)之后,才能读写其中的数据。总共有两类视图,分别是特定类型的TypedArray和通用类型
阅读全文
ES6躬行记(12)——数组
摘要:ES6为数组添加了多个新方法,既对它的功能进行了强化,也消除了容易产生歧义的语法。 一、静态方法 1)of() ES6为Array对象新增的第一个静态方法是of(),用于创建数组,它能接收任意个参数,返回值是由这些参数组成的新数组。创建数组比较传统的做法是用构造函数Array(),但当参数是一个正整
阅读全文
ES6躬行记(11)——对象
摘要:在第5篇中,讲解了多个对象字面量的改进,本节将重点介绍两个新增的静态方法,以及对象属性的重复处理和枚举顺序。 一、Object.is() 此方法用于判断两个值是否相同,内部实现了SameValue算法,其行为类似于全等( )比较,但它认为两个NaN是相等的,而+0和-0却是不等的。Object.is
阅读全文
ES6躬行记(10)——正则表达式
摘要:在ES5中,如果使用构造函数RegExp()初始化RegExp对象(即正则表达式),并且它的第一个参数是正则表达式时,那么不允许再传入标志字符串(即第二个参数)。而ES6更改了这项限制,如果传入了第二个参数,那么就会取代第一个参数中的标志,如下所示。 一、u标志 由于正则表达式无法正确处理辅助平面中
阅读全文
ES6躬行记(9)——字符串
摘要:在介绍字符串之前,有必要先了解一点Unicode的基础知识,有助于理解ES6提供的新功能和新特性。 一、Unicode Unicode是一种字符集(即多个字符的集合),它的目标是涵盖世界上的所有字符,为其提供唯一的标识符,这个标识符叫做码位或码点(Code Point)。码位既可以用一个从0开始计算
阅读全文
ES6躬行记(8)——数字
摘要:一、进制 ES6不仅完善了数字的八进制形式,还补充了一种十六进制形式,并且添加了全新的二进制形式。下面的三个变量分别表示八进制、十六进制和二进制的10,注释中给出了该进制的另一种写法。 注意,只有十进制才能表示小数。 二、Number ES6不仅增强了Number对象处理数字的精度,还扩展了它的数字
阅读全文
ES6躬行记(7)——代码模块化
摘要:在ES6之前,由于ECMAScript不具备模块化管理的能力,因此往往需要借助第三方类库(例如遵守AMD规范的RequireJS或遵循CMD规范的SeaJS等)才能实现模块加载。而自从ES6引入了模块化标准后,就不需要再特地加载一次外部脚本了。模块化的语法不仅让JavaScript代码的组织变得更有
阅读全文
ES6躬行记(6)——Symbol
摘要:本节将会重点分析ES6引入的第6种基本类型:Symbol(符号)。符号可以像字符串那样作为对象的属性名,只是它有唯一性的特点,可以避免属性名之间的冲突。 一、创建 符号没有字面量形式,只能通过Symbol()函数创建。该函数有一个可选的参数,只是用来描述当前符号,除了便于阅读之外,没有其他用途。由此
阅读全文
ES6躬行记(5)——对象字面量的扩展
摘要:一、简洁属性和方法 当创建对象字面量时,如果属性值是与属性同名的已定义的标识符(例如变量、常量等),那么ES6允许省略冒号和属性值,这样就能避免冗余的初始化。下面分别用传统的键值对和最新的简写方式创建对象字面量,可以明显的看出,第二种书写起来更加精炼。 属性上的方法也可以用更加简洁、直观的语法来表达
阅读全文