ECMAScript 6常用特性(部分)

日期:2017年5月11日      标签:es6

let&const

let: 在块级作用域内定义变量,在块级作用域外不能使用,不存在变量提升,会产生暂时性死区;

const: 在块级作用域内定于常量,常量的值必须在定义的时候初始化,并且不能修改(const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动,对于简单对象,值是不可以改边,但对于复合类型的数据,如数组和对象,是可以改变属性和值的),而且在块级作用域外不能使用,不存在变量提升。

let和const申明的全局变量将不属于顶层对象的属性,通过window.变量名将取不到。

Class

  • constructor:constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
  • new:通过new关键字实例化一个对象。
  • super:获取父类的this。
  • extends: Class之间可以通过extends关键字实现继承,子类必须在constructor方法中调用super方法,否则新建实例时会报错。
class Person {  
    constructor(name, sex) {
        this.name = name;
        this.sex = sex;
    }
    getName() {
        return this.name;
    }
    getSex() {
        return this.sex;
    }
};

class User extends Person {  
    constructor(name, sex, age) {
        super(name, sex);
        this.age = age;
    }
    getUserInfo() {
        return {
            name: super.getName(),
            sex: super.getSex(),
            age: this.age
        };
    }
};

let user = new User('张三', '男', 22);  
let userInfo = user.getUserInfo();  
console.log(userInfo);  

class不存在变量提升,在class申明前使用将报错。

解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。

let [a, b, c] = [1, 2, 3];  

上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。 如果右边的值不能完全匹配左边的变量,为匹配到的变量值为undefined。

Symbol

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型

Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

for..of

const arr = ['red', 'green', 'blue'];

for(let v of arr) {  
  console.log(v); // red green blue
}

箭头函数

ES6允许使用“箭头”(=>)定义函数。

var f = v => v;  
// 这两种定义是一样的
var f = function(v) {  
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;  
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;  
// 等同于
var sum = function(num1, num2) {  
  return num1 + num2;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

var sum = (num1, num2) => { return num1 + num2; }  

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。

var getTempItem = id => ({ id: id, name: "Temp" });  

module

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

export

var firstName = 'Michael';  
var lastName = 'Jackson';  
var year = 1958;

export {firstName, lastName, year};  

import

import { stat, exists, readFile } from 'fs';  

参考文档

(正文完)



© 喻小右 2016 京ICP备15064386号-1