ES6新增的语法有哪些 http://es6.ruanyifeng.com/
- let 和 const
- 块级作用域
- 解构赋值
- 箭头函数
- promise
- class定义类
- Set 去重 因为set不能有重复项
- for of 遍历数组 不能循环对象
1、let和const
1、let和const没有变量提升。var有变量
2、let和const不能重复声明,var可以(在一个函数里面,let a 上方不能有a )
var是ES5提出的,let和const是ES6提出的。
const声明的是常量,必须赋值
1)一旦声明必须赋值,不能使用null占位。
2)声明后不能再修改
3)如果声明的是复合类型数据,可以修改其属性
-
let和var声明的是变量,声明之后可以更改,声明时可以不赋值
-
var允许重复声明变量,后一个变量会覆盖前一个变量。let和const在同一作用域不允许重复声明变量,会报错。
-
var声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。
let和const不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError错。 -
var不存在块级作用域。let和const存在块级作用域。
-
ES5中作用域有:全局作用域、函数作用域。没有块作用域的概念。
-
ES6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。
2.数组解构赋值
- 在数组中,解构是一一对应的;如果只有变量,右边没有对应的值,那么默认解构出undefined
- 被解构的值(右边)一定是可遍历的 (右边是[] {})
let [foo]=1; let[f]=null; - 解构赋值允许赋默认值
let [a,b=“x”]=[1];console.log(b);
3. 对象的解构赋值
1.对象是按照对象的属性名进行匹配和解构的,必须保证属性名一致;
2.如果等号右边没有对应的属性值,解构出undefined;
3.如果右边等于undefined,那么不会给左边赋值;
let {sex = 1} = {sex:undefined}
console.log(sex); //1
4.函数解构赋值
function fn([x,y=0]=[4,4]){
console.log(x,y); //2 0
}
fn([2])
function fn([x,y]){
console.log(x,y);// 2 undefined
}
fn([2])
5. Array.from: 将类数组集合转成真正的数组
Array.of : 将一组数转成数组
6.扩展运算符(实参)
let arr =[12,2];
let arr1 = [100,200];
console.log([…arr,…arr1]) [12,2,100,200]
7.剩余运算符// 将多余的值收缩成一个数组; 形参
function sum(m,…ary,n){ 会报错 …ary有变量接收会报错
m=10 …ary=[2,2]
sum(10,2,2,8)
8. 箭头函数
1、箭头函数没有this
2、没有arguments
3、如果在箭头函数里使用this,那他就会往上一级作用域查找this
7. 不能作为构造函数,不能被new
8. 不能被generation函数
4、如果只有一个形参,可以去掉小括号
5、如果只有return一行代码,可以省略return和大括号
6、如果return的是一个空对象,你要是省略的话,就给空对象加小括号
9. 块级作用域
if else for while try catch
10.set
Set 去重 因为set不能有重复项
let ary = new Set([1,2,3,4,5])
for(var key of ary){
console.log(key); //一个一个出来是数组里的每一项
}
let arr = [1, 2, 3, 4, 5, 1, 2, 3];
let ary = new Set(arr);
console.log([...ary]) // 变成数组 用点点点展开
console.log(ary); //new之后会成为实例 ,实例是对象
11.for of
let ary = [1,2,3,4,5,66];
let obj = {a:1,b:2};
for(let key of ary){
console.log(key); //代表数组每一项
}
let ary = [100,200,300,400];
for(let key of ary.keys()){
console.log(key);//循环数组索引
}
let ary = [100,200,300,400];
for(let key of ary.values()){
console.log(key);//数组每一项
}
let ary = [100,200,300,400];
for(let key of ary.entries()){
console.log(key);// [0 : 100] 索引 : 所对应的那项
}
数组新增方法:some every filter reduce …
对象新增方法: Object.assign() Object.values() Object.keys() Object.create()…