ECMAScript 6 新内容一览
-
let, const (定义块级局部变量), 函数在块级域中
-
解构: let {x, y} = pt; let [s, v, o] = triple(); (如可以 let pt = {x:2, y:-5}).
-
参数设置默认设置: function f(x, y=1, z=0) {...}
-
rest: function g(i, j, ...r) { return r.slice(i, j); } (而不是疯狂地使用arguments).
-
spread: let a = [0,1,2,3], o = new Something(...a);
-
proxies: let obj = Proxy.create(handler, proto). 简单地说,就是类对象元素的符号重载.
-
weak map: let map = new WeakMap. 当你有循环应用的时候用它.
-
generators: function* gen() { yield 1; yield 2; } 事实上, gen() 返回一个有next()属性的对象
-
迭代器: for (var [key, val] of items(x)) { alert(key + ',' + val); }. Iterators 可以是 generators 或者 proxies.
-
array and generator comprehension: [a+b for (a in A) for (b in B)] (array comprehension), (x for (x of generateValues()) if (x.color === 'blue')) (generator expression).
-
二进制数据: const Pixel = new StructType({x:uint32, y:uint32, color:Color}) (此处Color本身就是一个结构类型), new ArrayType(Pixel, 3).
-
类语法, 包含 extends, prototype, and super:
class Point extends Base { constructor(x,y) { super(); this[px] = x, this[py] = y; this.r = function() { return Math.sqrt(x*x + y*y); } } get x() { return this[px]; } get y() { return this[py]; } proto_r() { return Math.sqrt(this[px] * this[px] + this[py] * this[py]); } equals(p) { return this[px] === p[px] && this[py] === p[py]; } } - 模块:
module math { export function sum(x, y) { return x + y; } export var pi = 3.141593; } import {sum, pi} from math; alert(sum(pi,pi));
- quasis: multiline, 可扩展的预处理字符串. You are ${age} years old.
// The following regexp spans multiple lines. re`line1: (words )* line2: \w+` // It desugars to: re({raw:'line1: (words )*\nline2: \w+', cooked:'line1: (words )*\nline2: \w+'})
作者:Barret Lee 出处:hustskyking.cnblogs.com