目录
三、ES6 模块——export 命令和 import 命令
一、概述
ES5 声明变量只有两种方式:var 和 function。
ES6 声明变量的方式有 6 种:
- var
- function
- let
- const
- import
- class
二、let 和 const
1、二者异
- let 用来声明一个变量;而const 用来声明一个常量,一旦声明,常量的值就不能改变。其实,const 保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动:
- 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量;
- 对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const 只能保证这个指针是固定的(即总是指向另一个固定的地址)。
const a = [];
a.push('Hello'); // 可执行
a.length = 0; // 可执行
a = ['Dave']; // 报错 TypeError: Assignment to constant variable.
const foo = {};
foo.prop = 123; // 可执行
foo.prop // 可执行
foo = {}; // 报错 TypeError: Assignment to constant variable.
/**
* 彻底冻结一个对象,要使用 Object.freeze() 方法,具体实现分两步:
* 1.冻结对象本身;
* 2.冻结对象的属性。
*/
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
const a = {};
constantize(a);
// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
a.name = "Mary";
- let 可以先声明,后赋值;而 const 一旦声明常量,就必须立即初始化,不能留到以后赋值。
let a;// 不报错
const b;// 报错 SyntaxError: Missing initializer in const declaration
2、二者同
- 只在声明所在的块级作用域内有效。
- 不提升,存在暂时性死区,只能在声明的位置后面使用。
- 不可重复声明。
- 在大括号内,使用 let 创建一个变量或使用 const 创建一个常量时,都会形成一个块级作用域。
三、ES6 模块——export 命令和 import 命令
https://blog.csdn.net/mChales_Liu/article/details/116934722
四、class(类)
https://blog.csdn.net/mChales_Liu/article/details/116933461
若要更深入的学习,请参见阮老师的大作:https://es6.ruanyifeng.com/#README