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';