介绍

ECMAScript6是下一代Javascript标准,这个标准将在2015年6月得到批准。ES6是Javascript的一个重大的更新,并且是自2009年发布ES5以来的第一次更新。 它将会在主要的Javascript引擎实现以下新的特性。

Arrows(箭头函数)

ES6允许使用“箭头”(=>)定义函数。在语法上类似于C#、Java8和CoffeeScript的相关特性。它们同时支持表达式和语句体,和函数不同的是, 箭头在上下文中共享相同的this关键字。

// 表达式
var odds = evens.map(v => v + 1);
var nums = evens.map((v, i) => v + i); // 语句体
nums.forEach(v => {
if (v % 5 === 0)
fives.push(v);
}); // this关键字
var bob = {
_name: "Bob",
_friends: [],
printFriends() {
this._friends.forEach(f =>
console.log(this._name + " knows " + f));
}
}

 

Classe结构

相对于目前使用的基于原型的面向对象模式而言,ES6中的class做法是一个简单的语法糖。它有一个方便的申明模式,并且鼓励互操作性。 class支持基于原型的继承、super调用、实例和静态方法和构造函数。

class SkinnedMesh extends THREE.Mesh {
//构造函数
constructor(geometry, materials) {
super(geometry, materials); this.idMatrix = SkinnedMesh.defaultMatrix();
this.bones = [];
this.boneMatrices = [];
//...
}
update(camera) {
//...
super.update();
}
//静态方法
static defaultMatrix() {
return new THREE.Matrix4();
}
}

在上面的代码中,ES6使用constructor方法代替ES5的构造函数。

增强的Object对象

Object对象的增强ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

var obj = {
// __proto__
__proto__: theProtoObj,
// 对 ‘handler: handler’ 的简化版
handler,
// 方法
toString() {
// Super calls
return "d " + super.toString();
},
// 计算(动态)属性名称
[ 'prop_' + (() => 42)() ]: 42
};

模板字符串

模板字符串提供构造字符串的语法糖,这种用法类似perl,python中的插值特征功能。 可选地,可以添加一个标签允许自定义字符串建设,避免注入攻击或从字符串构造更高层次数据结构的内容。

// 基本的字符串创建
`In JavaScript '\n' is a line-feed.` // 多行字符串
`In JavaScript this is
not legal.` // 构建DOM查询
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?` GET`http://foo.org/bar?a=${a}&b=${b} X-Credentials: ${credentials}
{ "foo": ${foo},
"bar": ${bar}}`(myOnReadyStateChangeHandler);

Let 和 Const操作符

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。

function f() {
{
let x;
{
// okay, block scoped name
const x = "sneaky";
// error, const
x = "foo";
}
// error, already declared in block
let x = "inner";
}
}

For...of循环

JavaScript原有的for...in循环,只能获得对象的键名,不能直接获取键值。ES6提供for...of循环,允许遍历获得键值

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;
print(n);
}

Generators

ES6草案定义的generator函数,需要在function关键字后面,加一个星号。然后,函数内部使用yield语句,定义遍历器的每个成员。

yield有点类似于return语句,都能返回一个值。区别在于每次遇到yield,函数返回紧跟在yield后面的那个表达式的值,然后暂停执行,下一次从该位置继续向后执行,而return语句不具备位置记忆的功能。

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;
print(n);
}

Modules 模块

  • 基本用法

    ES6允许定义模块。也就是说,允许一个JavaScript脚本文件调用另一个脚本文件。

    假设有一个circle.js,它是一个单独模块。

      // circle.js
    
      export function area(radius) {
    return Math.PI * radius * radius;
    } export function circumference(radius) {
    return 2 * Math.PI * radius;
    }
     

    然后,main.js引用这个模块。

      // main.js
    
      import { area, circumference } from 'circle';
    
      console.log("圆面积:" + area(4));
    console.log("圆周长:" + circumference(14));
     

    另一种写法是整体加载circle.js。

      // main.js
    
      module circle from 'circle';
    
      console.log("圆面积:" + circle.area(4));
    console.log("圆周长:" + circle.circumference(14));
     
  • 模块的继承

    一个模块也可以继承另一个模块。

      // circleplus.js
    
      export * from 'circle';
    export var e = 2.71828182846;
    export default function(x) {
    return Math.exp(x);
    }
     

    加载上面的模块。

  •   // main.js
    
      module math from "circleplus";
    import exp from "circleplus";
    console.log(exp(math.pi);
     
  • 模块的默认方法

    还可以为模块定义默认方法。

  •   // circleplus.js
    
      export default function(x) {
    return Math.exp(x);
    }

使用

目前,V8引擎已经部署了ECMAScript 6的部分特性。使用node.js 0.11版,就可以体验这些特性。(下载安装请移步到node.js官网)

用--harmony参数进入node运行环境,就可以在命令行下体验ECMAScript 6了。

node --harmony

Github地址: https://github.com/hellfire/es6features-cn

ECMAScript6-下一代Javascript标准的更多相关文章

  1. Canvas API -- JavaScript 标准参考教程(alpha)

    Canvas API -- JavaScript 标准参考教程(alpha) Canvas API

  2. JavaScript 标准内置对象Promise使用学习总结

    Javascript标准内置对象Promise使用学习总结   by:授客 QQ:1033553122 1.   基础用法 var condition = true; let p = new Prom ...

  3. JavaScript 标准内置对象

    JavaScript 标准内置对象或称全局的对象(global objects)不要和 全局对象(global object)混淆.这里说的全局的对象是说在全局作用域里的对象,全局作用域包含了全局对象 ...

  4. JavaScript 标准参考教程(alpha) 阮一峰

    JavaScript 标准参考教程(alpha)http://javascript.ruanyifeng.com/#introduction

  5. 用于编写下一代JavaScript的编译器。

    下载 用于编写下一代JavaScript的编译器. 支持巴别塔 Babel(发音为babble)是一个由社区驱动的项目,被许多公司和项目使用,由一群志愿者维护.如果你愿意帮助支持这个项目的未来,请考虑 ...

  6. JavaScript标准参考教材(alpha)--笔记

    一.导论 二.基本语法 1.严格来说var a=1与a=1效果不太一样,delete命令无法删除前者. JavaScirpt是一种动态类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值. J ...

  7. boost.ASIO-可能是下一代C++标准的网络库

    曾几何时,Boost中有一个Socket库,但后来没有了下文,C++社区一直在翘首盼望一个标准网络库的出现,网络上开源的网络库也有不少,例如Apache Portable Runtime就是比较著名的 ...

  8. JavaScript标准Selection操作

    简介 术语 属性 方法 document.activeElement document.designMode = 'on'; 简介 selection是对当前激活选中区(即高亮文本)进行操作. 在非I ...

  9. Javascript标准参考教程学习记录

    教程:http://javascript.ruanyifeng.com/ 基本语法 - 函数 1.函数名的提升 JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数 ...

随机推荐

  1. 《Linux及安全》实验安排

    SEED(SEcurity EDucation)项目由雪城大学杜文亮教授2002年创立,为计算机教学提供一套信息安全实验环境,目前已开发超过30个实验,涵盖广泛的安全原理,被全世界数百个高校采用. 实 ...

  2. idea 重写toString()模板,转成json格式

    idea toString()模板,将对象toString()为json格式. 1. 2.点击新增 public java.lang.String toString() { final java.la ...

  3. 微信支付开发-Senparc.Weixin.MP详解

    年底了,反而工作更忙了,我从15年11月开始写<1024伐木累>系列小说和爆笑对白,得到了很多身边的技术好友的支持,现在爆笑对白已经有越来越多的朋友一起帮着写段子,整理,包括小说内容的编辑 ...

  4. Orchard内置特性(以模块来说的)

    本文链接:http://www.cnblogs.com/souther/p/4539169.html 主目录 Orchard中有很多可以直接和多次使用的特性,这些东西在官方的Gallery中可以找到. ...

  5. Ubuntu 上创建常用磁盘阵列

    RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失 ...

  6. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

  7. Jsp内置对象及EL表达式的使用

    一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...

  8. 编写高质量代码改善C#程序的157个建议[协变和逆变]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议42.使用泛型参数兼容泛型接口的不可变性 建议43.让接口 ...

  9. JavaScript表单处理(下)

    内容提纲: 1.文本框脚本 2.选择框脚本 发文不易,转载请亲注明链接出处,谢谢!   一.文本框脚本 在HTML中,有两种方式来表现文本框: 一种是单行文本框<input type=" ...

  10. DOM系列---DOM获取尺寸和位置

    内容提纲: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本篇我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式. 一.获取元素CSS大小 1.通过style获取 ...