ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。
年份 | 版本 |
---|---|
2015年6月 | ES2015 |
2016年6月 | ES2016 |
2017年6月 | ES2017 |
2018年6月 | ES2018 |
... | ... |
ES6实际上是一个泛指,泛指ES2015及其后续的版本。
每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。
变量提升特性增加了程序运行时的不可预测性。
语法过于松散,实现相同的功能,不同的人可能会写出不同的代码。
ES6中新增的用于声明变量的关键字。
if(true){ let a = 10 ; } console.log(a) // a is not defind使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。 - 不存在变量提升 ``` console.log(a) // a is not defined let a = 20; ``` - 暂时性死区 ``` var temp = 123; if(true){ temp = 'abc'; let temp; } ```
作用:声明常量,常量就是值(内存地址)不能变化的量。
if(true){ const a = 10; } // a is not defined
const PI; // Missing initializer in const declaration
const PI = 3.14; PI = 100; // Assignment to constant variable.
const ary = [100,200]; ary[0] = 'a'; ary[1] = 'b'; console.log(arg); // ['a','b']; ary = ['a','b'] // Assignment to constant variable.
var | let | const |
---|---|---|
函数级作用域 | 块级作用域 | 块级作用域 |
变量提升 | 不存在变量提升 | 不存在变量提升 |
值可更改 | 值可更改 | 值不可更改 |
ES6允许从数组中,提取值,按照对应位置,对变量赋值。对象也可以实现解构。
let[a,b,c] = [1,2,3] console.log('' + a + b + c)
如果解构不成功,变量的值为undefined
let [foo] = []; let[bar,foo] = [1];
let person = {name:'zhangsan', agg:19}; let{name, age} = person; console.log(name); // '张三' console.log(age); // 20
let{name:myName, age:myAge} = person; // myName myAge 属于别名 console.log(myName); // 'zhangsan' console.log(myAge); // 19