1、let和const
let:
- let声明变量,没有变量提升
- 是一个块级作用域 {包裹的部分}
- 不能重复声明
const:
- 没有变量提升
- 是一个块级作用域
- 声明常量,一旦声明,无法修改
var:(es5)
- 有变量提升
- 可以重复声明
2、模板字符串
``
${ }
3、剩余运算符 (...+具名参数,比如 ...keys)
把多个独立的参数合并到一个数组中
(视频例子没太明白,回头再看看)有点明白了,举例:
let node = { type: 'nihao', name: 'mingzi', sex: 'nan' } let { type, ...res } = node; console.log(res);
...res就是node中除了type之外的(剩余的)
4、扩展运算符
将一个数组分割,并将各个项作为分离的参数传给函数
比如求数组最大值,可以:
const num3 = Math.max(...num2)
而不需要
const num3 = Math.max.apply(null,num2);
5、箭头函数
没有this指向,箭头函数内部this值只能通过查找作用域链确定。
一旦使用this,就不存在当前作用域链
特点:
- 函数内部没有arguments
- 不能使用new关键字实例化对象
6、解构赋值
对象解构
举例:
let node = { type: 'nihao', name: 'mingzi', sex: 'nan' } let { type, ...res } = node; //不完全解构 let { type, name, sex } = node; //完全解构 console.log(res);
数组解构
举例:
let arr = [1,2,3] let [a, b] = arr //不完全解构 let [a, b, c] = arr //完全解构 console.log(a,b);
7、es6扩展的对象功能
对象属性与属性值的简单写法:
const name = 'mingzi', age = 18;
const person1 = {
name: name,
age: age,
sayName: function () {
console.log(this.name);
}
}
/ es6的简单写法
const person2 = {
name,
age,
sayName () {
console.log(this.name);
}
}
对象属性名的拼接
const obj2 = {
['a'+'b']:23 //属性名的拼接,必须带[]
}
console.log(obj2); // 输出: {ab:23}
比较两个值是否严格相等:Object.is()
console.log(Object.is('1','1')); //true
console.log(Object.is(1, 2)); //false
对象的合并
let obj1 = {
name: '111',
age: 24
}
let obj2 = {
sex: 'nan'
}
console.log(Object.assign(obj1, obj2));
8、Symbol
ES6新增原始数据类型,表示独一无二的值
Symbol定义的对象中的变量,取值时一定要用[变量名]
const s1 = Symbol('s1'); const obj = {}; obj[s1] = 'nihao'; console.log(obj[s1]); // [变量名]
获取Symbol声明的属性名(作为对象的key):
//获取Symbol声明的属性名(作为对象的key) console.log(Object.keys(obj)); // 输出空数组 这个方法获取不到 console.log(Object.getOwnPropertySymbols(obj)); // 可以获取 console.log(Reflect.ownKeys(obj)); // 可以获取
9、Map和Set
Set:
const set = new Set()
- set.add() //添加元素
- set.delete() //删除元素
- set.has() //校验某个值是否在set中
- set.size() //长度
- set.clear() //清空