ES6来源
ES:ECMAScript的简写,ECMAScript是一个语言标准 ES6:是ECMAScript的第六个版本
ECMAScript与JavaScript的关系
ECMAScript是一个语言标准,JavaScript中的语法(如if、var…)只要符合这个标准,就可在JS中运行,就可以在浏览器中运行。
JavaScript = ECMAScript + WebApi(DOM + BOM)
ES6发展史
年份 | 版本 | 发生事件 |
---|---|---|
1996年 | ES1.0 | NetScape公司将JS交给了一个叫ECMA的组织,ES才正式出现 |
1998年6月 | ES2.0 | 发生了一些小的修改 |
1999年12月 | ES3.0 | 比较成功,得到了比较多人的支持 |
2007年 | ES4.0 | 草案发布,之后就被废除 |
2008年 7月 | ES4.1 | 相当于严重缩水的ES4.0 ,目前使用最多的版本 |
2009年 | ES5.0 | 正式发布,草案直接指向ES6.0 |
2011年 | ES5.1 | 正式发布,成为ISO国际标准 |
2013年3月 | ES6.0 | 草案冻结,不再添加新功能 |
2013年12月 | ES6.0 | 草案发布 |
2015年6月17日 | ES6.0 | 正式发布,又称为ES2015 |
2016年 | ES7 | 就不在使用版本号,用年份的代替 |
新增属性
let声明变量
1、let声明的变量不会挂载在window中,不会造成全局变量污染;
2、let不能重复声明;
3、let不会声明提前(人为看到是没有提前,实则是有声明提前,只是提前在暂时性的死区当中);
4、本身只要函数作用域、全局作用域,然后新增了一个块级作用域{},用在例如for循环中。
const声明常量
- const声明常量时,声明和赋值要同时进行,并且不允许改变储存空间的地址
- 一旦声明之后, 值不能修改,不允许改变内存空间的地址
- 与let一样新增了块作用域{}
暂存死区
var a = 9;
if(1){
a = 6; //在当前块作用域中存在a,使用let/const声明的情况下,a赋值为6时,只会在当前作用域中找变量a,
//这时因为还没有声明,控制台会输出错误提示Error:a is not defined
let a = 3;
}
同一作用域下let和const不能声明同名变量
在大型公司进行项目整改时,将代码从ES5迁移到ES6中,最好使用const,少使用let,因为常量的效率比变量高
解构赋值
两边必须是合法的值
两边的结构必须要一致
声明和赋值不能分开
解构默认值
let {a = 6, b = 3} = {a = 8}; // a = 8 b = 3;
针对数组的解构赋值
//两种情况:
//完全解构
//不完全解构
//不完全解构的情况
let [a = 1, b] = []; // a = 1, b = undefined
let [a, [b], c] = [1, [3, 6], 9];//a = 1 //b = 3 //c = 9
对象的解构赋值
let obj = {
name : "yaya",
age : 18,
}
let name,age;
({name,age} = obj);
console.log(name,age)// yaya 18
字符串模板
增强版的字符串,可以用反引号(`)标识,可当作字符串使用,也可定义多行字符串
在字符串中嵌入变量或者函数,将变量名在${}中
可以转义字符
//字符串的拼接 + 变量
//`${表达式}字符串`
var name = 'yaya';
var age = 16;
console.log(`${name}今年${age}岁了`); //yaya今年16岁了
console.log(`${true?`今年`:`明年`}\n`)