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. (三)OpenCV-Python学习—图像平滑

    由于种种原因,图像中难免会存在噪声,需要对其去除.噪声可以理解为灰度值的随机变化,即拍照过程中引入的一些不想要的像素点.噪声可分为椒盐噪声,高斯噪声,加性噪声和乘性噪声等,参见:https://zhu ...

  2. 微信小程序之分享功能

    说到分享 大家都会想到手机右上角点击不就分享了么?对的没错,那样是分享转发的是小程序  而不是指定的某个页面,所以自己动手丰衣足食,自己写一个转发功能被, 其实也没那么可怕,主要参考的是微信小程序AP ...

  3. 通AI启示录,从一篇数学物理基础论文说起 原创: 关注前沿科技 量子位 今天 允中 发自 凹非寺

    通AI启示录,从一篇数学物理基础论文说起 原创: 关注前沿科技 量子位 今天 允中 发自 凹非寺

  4. ES6内建对象的继承

    在ES6之前, JS是无法通过继承的方式创建属于自己的特殊数组的, 也就是说可以使用原型链来继承数组的一些方法, 但是某些返回一个数组的方法返回的值还是一个Array的实例, 例如slice, len ...

  5. linux简单命令4---压缩与解压

    1:压缩命令:zip 2:.gz压缩,不能压缩目录,会压缩目录里的文件 3:.bz2压缩,不能压缩目录,直接报错 ------------------------------------------- ...

  6. node节点扩容

    node节点扩容: 安装docker 部署 kubelet组件 拷贝admin.conf 拷贝bootstrap.conf 安装cni网络插件 拷贝ca.pem 证书,配置kubelet-config ...

  7. sudo内容

    [root@bogon ~]# cat /etc/sudoers## Sudoers allows particular users to run various commands as## the ...

  8. python:序列化与反序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  9. 使用PowerCLI给ESXi批量设置时间和配置NTP

    在现代的各种业务系统中,时间同步很重要.现在VMware的虚拟化解决方案应用非常广泛,给ESXi宿主机一个统一准确的时间,也给客户机系统一个准确的时间. 生产环境中主机数量少的话倒是可以手动设置,但是 ...

  10. 三节课MINI计划第四周

    一.任务 二.任务一 (一)梳理产品卖点 (二)策划线上活动 三.任务二 四.周报