ES6语法 学习
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语法 学习的更多相关文章
- ES6 语法学习(一)
1.let 和 const 关键字 let 与 var 的区别有: a.let 声明的变量只在当前的块级作用域内有效(块级作用域通俗的话就是被{}包裹起来的区域声明对象的{}例外). b.let 声明 ...
- ES6 语法学习总结
第一节:什么是ES6? ES6是什么?跟JavaScript有什么关系? JavaScrip由三部分组成:分别是ECMAScript,BOM和DOM. 1)由此看出,ECMAScript是Java ...
- ES6 语法学习(二)
1.类的建立与继承 constructor方法是类的构造函数是默认方法,通过new命令生成对象实例时,自动调用该方法.一个类必须有constructor方法,如果没有显式定义,一个默认的constru ...
- ES6语法学习(一)-let和const
1.let 和 const 变量提升: 在声明变量或者函数时,被声明的变量和函数会被提升到函数最顶部: 但是如果声明的变量或者函数被初始化了,则会失去变量提升: 示例代码: param2 = &quo ...
- Webpack4 学习笔记三 ES6+语法降级为ES5
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...
- ES6语法的学习与实践
ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常 ...
- 如何让浏览器支持ES6语法,步骤详细到小学生都能看懂!
为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...
- WebStorm ES6 语法支持设置
ECMAScript 6是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础上,推出JavaScript 2.0.ES6的目标,是使得JavaS ...
- 一些基础的ES6 语法
<script> window.onload = function () { //---------------------------let----------------------- ...
随机推荐
- [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明
在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样: #define MX6Q_PAD_GPIO_19__GPIO_4_ ...
- window 下 某个端口被占用
window 下 某个端口被占用 1. 开始—->运行—->cmd,或者是window+R组合键,调出命令窗口: 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观 ...
- SQL-W3School-函数:SQL MID() 函数
ylbtech-SQL-W3School-函数:SQL MID() 函数 1.返回顶部 1. MID() 函数 MID 函数用于从文本字段中提取字符. SQL MID() 语法 SELECT MID( ...
- Java面试之http知识点(必问)
Java面试之http知识点(必问) 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/q ...
- HttpClient结合PostMethod调用接口
HttpClient结合PostMethod调用接口 解决方法: HttpClient client = new HttpClient(); PostMethod post = new PostM ...
- QML加载gif
AnimatedImage { anchors.fill: parent source: "qrc:/img/timg.gif" }
- 清空Redis缓存
Redis缓存清理 1.访问redis根目录 cd /usr/local/redis-2.8.19 2.登录redis:redis-cli -h 127.0.0.1 -p 6379 3.查 ...
- python基础之知识补充-作用域、特殊语法
python作用域 无函数的作用域 在python中没有块级作用域 什么叫块级作用域呢?先来看个例子: if 1 == 1: name= 'alex' print(name) 运行结果为alex 在j ...
- InfluxDB+Grafana大数据监控系列之数据源配置(二)
一.Grafana 配置 InfluxDB 数据源 1.1 登录 Granfana 界面选择 InfluxDB 数据源 在前面我们已经部署好相应监控环境,登录Grafana:http://10.223 ...
- [CareerCup] Guards in a museum 博物馆的警卫
A museum was represented by a square matrix that was filled with O, G, and W where O represented ope ...