ECMAScript6 笔记
let 和 const
let和const是块作用域的 ,const是声明常量用的。
{let a = 10;}
a // ReferenceError: a is not defined.
let和const不存在变量提拔
console.log(foo); // ReferenceError
let foo = 2;
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
function bar(x = y, y = 2) {
return [x, y];
}
bar(); // 报错
const 不可变的只是援用的地点
const foo = {};
foo.prop = 123;
foo.prop// 123
foo = {} // TypeError: "foo" is read-only不起作用
假如真的想将对象凝结,应当运用Object.freeze要领。
const foo = Object.freeze({});
foo.prop = 123; // 不起作用
class
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static classMethod() {
console.log('fathor jt:hello');
}
}
class ColorPoint extends Point { //mix(Cons1,Cons2)
constructor(x, y, color) {
super(x, y);
this.color = color; // 准确
}
//原型要领
ptMethod(){
console.log('pt:hello');
}
static classMethod() {
//静态要领也是可以从super对象上挪用
super.classMethod();
console.log('jt:hello');
}
get prop() {
return 'getter';
}
set prop(value) {
console.log('setter: '+value);
}
}
Iterator和for…of轮回
Iterator的作用有三个:一是为种种数据结构,供应一个一致的、轻便的接见接口;二是使得数据结构的成员可以按某种序次分列;三是ES6制造了一种新的遍历敕令for…of轮回,Iterator接口重要供for…of消耗。
let arr = ['a', 'b'];
let iter = arr[Symbol.iterator]();
iter.next() //{ value: 'a', done: false }
iter.next() //{ value: 'b', done: false }
iter.next() //{ value: undefined, done: true }
上面代码中,变量arr是一个数组,原生就具有遍历器接口,布置在arr的Symbol.iterator属性上面。所以,挪用这个属性,就获得遍历器对象。
一个对象假如要有可被for…of轮回挪用的Iterator接口,就必须在Symbol.iterator的属性上布置遍历器天生要领(原型链上的对象具有该要领也可)。
class RangeIterator {
constructor(start, stop) {
this.value = start;
this.stop = stop;
}
[Symbol.iterator]() { return this; }
next() {
var value = this.value;
if (value < this.stop) {
this.value++;
return {done: false, value: value};
} else {
return {done: true, value: undefined};
}
}
}
for (var value of new RangeIterator(0, 3)) {
console.log(value);
}
Symbol
ES6引入了一种新的原始数据类型Symbol,示意举世无双的值。它是JavaScript言语的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
symbol键的设想初志是防止初志,因而JavaScript中最罕见的对象搜检的特征会疏忽symbol键。比方,for-in轮回只会遍历对象的字符串键,symbol键直接跳过,Object.keys(obj)和Object.getOwnPropertyNames(obj)也是一样。然则symbols也不完满是私有的:用新的API Object.getOwnPropertySymbols(obj)就可以列出对象的symbol键。另一个新的API,Reflect.ownKeys(obj),会同时返回字符串键和symbol键。(我们将在随后的文章中解说Reflect(反射) API)
猎取symbol的三种要领
挪用Symbol()。这类体式格局每次挪用都邑返回一个新的唯一symbol。
挪用Symbol.for(string)。这类体式格局会接见symbol注册表,个中存储了已存在的一系列symbol。这类体式格局与经由过程Symbol()定义的自力symbol差别,symbol注册表中的symbol是同享的。假如你一连三十次挪用Symbol.for(“cat”),每次都邑返回雷同的symbol。注册表异常有效,在多个web页面或同一个web页面的多个模块中常常须要同享一个symbol。
运用范例定义的symbol,比方:
Symbol.iterator
var s1 = Symbol();
var s2 = Symbol();
s1 === s2 // false
var mySymbol = Symbol();
var a = {
[mySymbol]: 'Hello!'
};
promie
天生器 Generators
鸠合
箭头函数
箭头函数供应了更简约的语法,而且箭头函数中 this 对象的指向是稳定的,this 对象绑定定义时地点的对象
// bad
"use strict";
var fn = function fn(v) {
return console.log(v);
};
// good
var fn= (v=>console.log(v));
Module
Babel下的ES6兼容性与范例
http://imweb.io/topic/561f9352883ae3ed25e400f5?utm_source=tuicool&utm_medium=referral