let 和 const
let 和var的区别
- (当前作用域下)不进行变量提升,但是在代码执行之前要进行声明,不进行提升(let声明的变量虽然不会进行变量提升,但是在形成作用域后代码执行之前,let声明的变量会有一个查重的机制)
- 当前作用域下let声明的变量不能重名
- let声明的变量和window键值对没有映射关系
- 在for循环中,用let定义的i,每循环一次,都会保存一个i的值在当前子作用域
Set数据结构
- set数据结构是es6中新增的一种数据结构:类似于数组,但是其成员都是唯一的
- set的参数必须是可以遍历的
let set = new Set(1);
console.log(set)//=>Uncaught TypeError: number 1 is not iterable (cannot read property Symbol(Symbol.iterator))
意思是数字1不是可遍历的。
- 向set数据末尾新增一项(只能是一项,如果有多个参数,他不会报错,但是只能添加第一个参数对应的数)
let a = new Set([1,2]);
console.log(a)//Set(2) {1, 2}
a.add(3);
console.log(a)//Set(3) {1, 2,3}
- 获取set成员的个数
let a = new Set([1,2]);
console.log(a.size)//=>2
- 删除set成员项(一次只能删除一个,如果参数是多个,他不会报错,但是每次只能删除参数的第一个)返回值为boolean。
let set = new Set([1,2,3]);
set.delete(1,2);//=>true
console.log(set)//=>Set(2){2,3}
- 判断该成员是否在set结构中(返回值是boolean)
let set = new Set([1,2,3])
set.has(3)//=>true
- 用es6中的…将set结构转换成数组
let set = new Set([1,2,3])
let ary =[...set]//=>[1,2,3]
- 用set实现数组去重(原数组不变)
let ary = [1,1,2,2,3,3];
let set = new Set(ary);
let newAry =[...set];//=>[1,2,3]
函数新增的特征
- es6中形参可以设置默认值
- 当函数有实参的时候,会覆盖默认值
- 函数执行时,没有实参,会取默认值
- 实参为undefined时,不会覆盖默认值(可以用这个占位)
- 一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。
function fn(x = 100, y = 200) {
console.log(x);
console.log(y);
}
fn(1, 2);//有实参的时候,会覆盖默认值 1,2
fn();//没有实参的时候,会取默认值 100,200
fn(undefined);//实参为undefined,不改变默认值(还是会取默认值,可以用这个占位)100,200
fn(undefined, 400)//100,400
//和解构赋值一起用
function f([x, y]) {
console.log(x, y)
}
f([1, 2]);//1 2
function f1([x, y = 3]) {//y=3为默认值
console.log(x, y)
}
f1([1]);//1 3
解构赋值
- 数组按照数组成员的顺序进行解构
- 对象按照对象的属性名进行解构
- 不论是字符串的解构还是数组还是对象的解构,等号两边的结构必须是一样的,否则解构失败
数组中新增的属性和方法
- Array.from();将类数组或者是类数组对象转化成标准的数组
let obj = { '0': 1, '1': 2, length: 2 };
console.log(Array.from(obj));//=>[1,2]
- Array.of();将对应的参数转换成数组(不管参数有多少,都会转换成对应的数组,包括没有参数的时候,他会返回[])
console.log(Array.of(1, 2, 3, 4));//=>[1,2,3,4]
console.log(Array())//一个参数的时候代表的是数组长度,两个以上才是数组成员项
箭头函数
箭头函数和普通函数的区别
定义时的区别
- 没有function关键字;并且形参和{}之间要有箭头;
- 如果形参只有一个,可以省略形参的小括号,两个以上或者是没有参数,都需要加上()
- 如果{}中只有一条语句时,可以省略{}
- 如果函数体只有return一条语句时,可以把{}和return都省略
- 如果return出一个对象时,需要在对象的大括号外面加上小括号
执行时的区别
- 箭头函数中没有this,他的this是继承当前上下文中的this(和他在哪执行没有关系,和他在哪定义有关,所以不能使用call、apply、bind改变箭头函数中的this指向)
- 箭头函数中不能使用arguments
- 箭头函数不能作为构造函数(类)
- 不可以使用yield命令,不能作为Generator函数
Class
- 在es6中定义一个类
//class:在ES6中用来定义一个类
class Fn {
constructor() {
//constructor中是往私有属性上新增方法
this.a = 100;
}
//共有属性
// 这个getX()是一个普通的函数
getX() {
console.log(this.a)
}
}
console.log(new Fn);
- extends 用来继承
class B extends A {
//类B继承类A
//class继承,继承了私有和公有属性
constructor(c) {
super(c);//调用父类构造器;继承了父类身上的属性和方法
this.b = 100;//添加私有属性
}
//公有属性
getY() {
}
}
console.log(new B(200));