ECMAScript 6,也被称为ECMAScript 2015是ECMAScript标准的最新版本。6是语言的一个重要更新,并第一次更新语言由于ES5 2009标准。现在主要JavaScript引擎中实现这些特性正在进行中。看到的ECMAScript 6语言完整规范的ES6标准。

微信小程序支持ES6写法

ECMAScript 6包括以下新的特点:

Arrows

箭头是使用=>语法的函数缩写。它们在语法上类似于C#,Java 8和CoffeeScript中的相关功能。它们既支持语句块体,又支持返回表达式值的表达式体。与函数不同,箭头与this周围的代码共享相同的词汇。

// Expression bodies
var odds = evens.map(v => v + 1);
var nums = evens.map((v, i) => v + i);
var pairs = evens.map(v => ({even: v, odd: v + 1})); // Statement bodies
nums.forEach(v => {
if (v % 5 === 0)
fives.push(v);
}); // Lexical this
var bob = {
_name: "Bob",
_friends: [],
printFriends() {
this._friends.forEach(f =>
console.log(this._name + " knows " + f));
}
}

更多信息:[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions]

Class

ES6类是基于原型的OO模式的简单糖。拥有一个简单的声明式表单使得类模式更容易使用,并且鼓励互操作性。类支持基于原型的继承,超级调用,实例和静态方法和构造函数。

class SkinnedMesh extends THREE.Mesh {
constructor(geometry, materials) {
super(geometry, materials); this.idMatrix = SkinnedMesh.defaultMatrix();
this.bones = [];
this.boneMatrices = [];
//...
}
update(camera) {
//...
super.update();
}
get boneCount() {
return this.bones.length;
}
set matrixType(matrixType) {
this.idMatrix = SkinnedMesh[matrixType]();
}
static defaultMatrix() {
return new THREE.Matrix4();
}
}

更多信息:[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes]

Enhanced Object Literals

对象文字被扩展为支持在构造中设置原型,foo: foo赋值的简写,定义方法,创建超级调用以及使用表达式计算属性名称。这些也将对象文字和类声明紧密地结合在一起,让基于对象的设计从一些相同的便利中受益。

var obj = {
// __proto__
__proto__: theProtoObj,
// Shorthand for ‘handler: handler’
handler,
// Methods
toString() {
// Super calls
return "d " + super.toString();
},
// Computed (dynamic) property names
[ 'prop_' + (() => 42)() ]: 42
};

更多信息:[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Object_literals]

Template Strings

模板字符串为构造字符串提供了语法糖。这与Perl,Python等中的字符串插值功能类似。可选地,可以添加标签以允许定制字符串结构,避免注入攻击或从字符串内容构建更高级别的数据结构。

// Basic literal string creation
`In JavaScript '\n' is a line-feed.` // Multiline strings
`In JavaScript this is
not legal.` // String interpolation
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?` // Construct an HTTP request prefix is used to interpret the replacements and construction
POST`http://foo.org/bar?a=${a}&b=${b}
Content-Type: application/json
X-Credentials: ${credentials}
{ "foo": ${foo},
"bar": ${bar}}`(myOnReadyStateChangeHandler);

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings

Destructuring 解构

解构允许使用模式匹配进行绑定,支持匹配数组和对象。解构是失败软的,类似于标准对象查找foo["bar"],undefined当没有找到时产生值。

// list matching
var [a, , b] = [1,2,3]; // object matching
var { op: a, lhs: { op: b }, rhs: c }
= getASTNode() // object matching shorthand
// binds `op`, `lhs` and `rhs` in scope
var {op, lhs, rhs} = getASTNode() // Can be used in parameter position
function g({name: x}) {
console.log(x);
}
g({name: 5}) // Fail-soft destructuring
var [a] = [];
a === undefined; // Fail-soft destructuring with defaults
var [a = 1] = [];
a === 1;

更多MDN信息:[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment]

Iterators + For..Of

迭代器对象支持像CLR IEnumerable或Java Iterable这样的自定义迭代。推广for..in到自定义基于迭代器的迭代for..of。不要求实现一个数组,使像LINQ这样的懒惰设计模式成为可能。

let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[pre, cur] = [cur, pre + cur];
return { done: false, value: cur }
}
}
}
} for (var n of fibonacci) {
// truncate the sequence at 1000
if (n > 1000)
break;
console.log(n);
}

迭代是基于这些duck-typed接口(只使用TypeScript类型的语法来说明):

interface IteratorResult {
done: boolean;
value: any;
}
interface Iterator {
next(): IteratorResult;
}
interface Iterable {
[Symbol.iterator](): Iterator
}

更多信息:[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of]

Generators

生成器使用function*和简化了迭代器创作yield。一个声明为function的函数返回一个Generator实例。生成器是迭代器的子类型,包括附加 next和throw。这些使值能够回流到生成器,所以yield是一个返回值(或抛出)的表达式。

注意:也可以用来启用“await”类似的异步编程,另请参阅ES7 await提议。

var fibonacci = {
[Symbol.iterator]: function*() {
var pre = 0, cur = 1;
for (;;) {
var temp = pre;
pre = cur;
cur += temp;
yield cur;
}
}
} for (var n of fibonacci) {
// truncate the sequence at 1000
if (n > 1000)
break;
console.log(n);
}

生成器接口是(仅使用TypeScript语法来进行说明):

interface Generator extends Iterator {
next(value?: any): IteratorResult;
throw(exception: any);
}

更多信息:[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols]

Unicode

支持完整Unicode的非中断添加,包括字符串中的新Unicode字面形式和u处理代码点的新RegExp 模式,以及在21位代码点级别处理字符串的新API。这些附加功能支持使用JavaScript构建全球应用程序。

// same as ES5.1
"

ES6语法 学习的更多相关文章

  1. ES6 语法学习(一)

    1.let 和 const 关键字 let 与 var 的区别有: a.let 声明的变量只在当前的块级作用域内有效(块级作用域通俗的话就是被{}包裹起来的区域声明对象的{}例外). b.let 声明 ...

  2. ES6 语法学习总结

    第一节:什么是ES6?   ES6是什么?跟JavaScript有什么关系? JavaScrip由三部分组成:分别是ECMAScript,BOM和DOM. 1)由此看出,ECMAScript是Java ...

  3. ES6 语法学习(二)

    1.类的建立与继承 constructor方法是类的构造函数是默认方法,通过new命令生成对象实例时,自动调用该方法.一个类必须有constructor方法,如果没有显式定义,一个默认的constru ...

  4. ES6语法学习(一)-let和const

    1.let 和 const 变量提升: 在声明变量或者函数时,被声明的变量和函数会被提升到函数最顶部: 但是如果声明的变量或者函数被初始化了,则会失去变量提升: 示例代码: param2 = &quo ...

  5. Webpack4 学习笔记三 ES6+语法降级为ES5

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...

  6. ES6语法的学习与实践

    ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常 ...

  7. 如何让浏览器支持ES6语法,步骤详细到小学生都能看懂!

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  8. WebStorm ES6 语法支持设置

    ECMAScript 6是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础上,推出JavaScript 2.0.ES6的目标,是使得JavaS ...

  9. 一些基础的ES6 语法

    <script> window.onload = function () { //---------------------------let----------------------- ...

随机推荐

  1. python pip 安装插件权限问题及 指定pip国内镜像源

  2. pytorch中的学习率调整函数

    参考:https://pytorch.org/docs/master/optim.html#how-to-adjust-learning-rate torch.optim.lr_scheduler提供 ...

  3. python数据分析数据标准化及离散化详解

    python数据分析数据标准化及离散化详解 本文为大家分享了python数据分析数据标准化及离散化的具体内容,供大家参考,具体内容如下 标准化 1.离差标准化 是对原始数据的线性变换,使结果映射到[0 ...

  4. Canal——Canal-Adapter源码在IDEA部署运行

    一.下载源码 下载地址:https://github.com/alibaba/canal 我这里用的是canal-1.1.4版本 源码结构 client-adapter项目就是本次要部署运行的 源码导 ...

  5. Spring Boot中一个Servlet主动断开连接的方法

    主动断开连接,从而返回结果给客户端,并且能够继续执行剩余代码. 对于一个HttpServletResponse类型的对象response来说,执行如下代码: response.getWriter(). ...

  6. 用Python做一个简单的小游戏

    学习总是枯燥的,对于Python小白的我来讲,更是乏味的.为了提高学习的兴趣,今天我就来写一个小程序练练手. 数字猜谜游戏相信大家都不陌生,A给出最小值最大值,B写一个该范围内的数,A猜测写下的是多少 ...

  7. charles 新的修改请求

    本文参考:charles 新的修改请求 compose New 是新出一个弹窗,自己手动一个个的去写: 可以写各种状态: – URL: – Method: – GET – POST – PUT – D ...

  8. OpenGL学习笔记 之一 (基本的图形绘制)

    参考网址:http://www.cnblogs.com/FredCong/archive/2012/10/13/2722893.html #include <glut.h> #includ ...

  9. 排序算法三:Shell插入排序

    排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评> ...

  10. TCP 客户端编程

    1.Qt中TCP客户端编程 对Qt编程而言,网络只是数据传输的通道: Qt提供了QTcpSocket类(封装了TCP协议细节): 将QTcpSocket的对象当做黑盒使用,进行数据首发. 1.1QTc ...