摘要: 官方文件 ECMAScript® 2015 Language Specification: ECMAScript 2015 规格 ECMAScript® 2016 Language Specification: ECMAScript 2016 规格 ECMAScript® 2017 Language 阅读全文
posted @ 2019-03-25 10:57 苗士军 阅读(322) 评论(0) 推荐(0) 编辑
摘要: Decorator 提案经过了大幅修改,目前还没有定案,不知道语法会不会再变。下面的内容完全依据以前的提案,已经有点过时了。等待定案以后,需要完全重写。 类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为。目前,有一个提案将这项功能,引入了 ECMAScript。 上 阅读全文
posted @ 2019-03-25 10:29 苗士军 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 介绍一些尚未进入标准、但很有希望的最新提案。 do 表达式 本质上,块级作用域是一个语句,将多个操作封装在一起,没有返回值。 上面代码中,块级作用域将两个语句封装在一起。但是,在块级作用域以外,没有办法得到t的值,因为块级作用域不返回值,除非t是全局变量。 现在有一个提案,使得块级作用域可以变为表达 阅读全文
posted @ 2019-03-25 10:26 苗士军 阅读(241) 评论(0) 推荐(0) 编辑
摘要: ArrayBuffer对象、TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口。这些对象早就存在,属于独立的规格(2011 年 2 月发布),ES6 将它们纳入了 ECMAScript 规格,并且增加了新的方法。它们都是以数组的语法处理二进制数据,所以统 阅读全文
posted @ 2019-03-25 10:24 苗士军 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法。 一般来说,没有必要阅读规格,除非你要写编译器。因为规格写得非常抽象和精炼,又缺乏实例,不容易理解,而且对于解决实际的应用问题,帮助不大。但是,如果你遇到疑难的语法问题,实在找不到答案,这时可以去查看规格文件,了解语言标准是怎么说的。 阅读全文
posted @ 2019-03-25 10:22 苗士军 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 块级作用域 (1)let 取代 var ES6 提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。 上面代码如果用var替代let,实际上就声明了两个全局变量,这显然不是本意。变量应该只在其声明的代码块内有效,var命令做不到这 阅读全文
posted @ 2019-03-25 10:19 苗士军 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 浏览器加载 传统方法 HTML 网页中,浏览器通过<script>标签加载 JavaScript 脚本。 上面代码中,由于浏览器脚本的默认语言是 JavaScript,因此type="application/javascript"可以省略。 默认情况下,浏览器是同步加载 JavaScript 脚本, 阅读全文
posted @ 2019-03-25 10:18 苗士军 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支 阅读全文
posted @ 2019-03-25 10:17 苗士军 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。 上面代码定义了一个ColorPoint类,该类通过extends关键字,继承了Point类的所有属性和方法。但是由于没有部署任何代码,所以这两个类完全一样,等于复制了一个Point类。 阅读全文
posted @ 2019-03-25 10:13 苗士军 阅读(1227) 评论(0) 推荐(0) 编辑
摘要: 简介 类的由来 JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。 上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板 阅读全文
posted @ 2019-03-25 10:12 苗士军 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是什么?一句话,它就是 Generator 函数的语法糖。 前文有一个 Generator 函数,依次读取两个文件。 上面代码的函数gen可以写成async函数,就是下面这样。 一比较就会发现,async函 阅读全文
posted @ 2019-03-25 10:10 苗士军 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 简介 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍 Generator 函数的语法和 API,它的异步编程应用请看《Generator 函数的异步应用》一章。 Generator 函数有多种理解角度。语法上,首先可以把它理解成,G 阅读全文
posted @ 2019-03-25 10:09 苗士军 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 传统方法 ES6 诞生以前,异步编程的方法,大概有下面四种。 回调函数 事件监听 发布/订阅 Promise 对象 Generator 函数将 JavaScript 异步编程带入了一个全新的阶段。 基本概念 异步 所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行 阅读全文
posted @ 2019-03-25 10:09 苗士军 阅读(135) 评论(0) 推荐(0) 编辑
摘要: Iterator(遍历器)的概念 JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接 阅读全文
posted @ 2019-03-25 10:08 苗士军 阅读(166) 评论(0) 推荐(0) 编辑
摘要: Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个 阅读全文
posted @ 2019-03-25 10:07 苗士军 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。 (1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object 阅读全文
posted @ 2019-03-25 10:06 苗士军 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和 阅读全文
posted @ 2019-03-25 10:04 苗士军 阅读(185) 评论(0) 推荐(0) 编辑
摘要: Set 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 上面代码通过add()方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。 Set函数可以接受一个数组(或者具有 it 阅读全文
posted @ 2019-03-25 10:01 苗士军 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Sym 阅读全文
posted @ 2019-03-25 09:58 苗士军 阅读(269) 评论(0) 推荐(0) 编辑
摘要: Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符( )。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。 ES6 提出“Same 阅读全文
posted @ 2019-03-25 09:53 苗士军 阅读(501) 评论(0) 推荐(0) 编辑