ECMAScript6进修笔记

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的三种要领

  1. 挪用Symbol()。这类体式格局每次挪用都邑返回一个新的唯一symbol。

  2. 挪用Symbol.for(string)。这类体式格局会接见symbol注册表,个中存储了已存在的一系列symbol。这类体式格局与经由过程Symbol()定义的自力symbol差别,symbol注册表中的symbol是同享的。假如你一连三十次挪用Symbol.for(“cat”),每次都邑返回雷同的symbol。注册表异常有效,在多个web页面或同一个web页面的多个模块中常常须要同享一个symbol。

  3. 运用范例定义的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

    原文作者:yinlubin2015
    原文地址: https://segmentfault.com/a/1190000003996717
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞