1.变量
let关键字
不允许重复声明
没有与解析
let定义变量会自己创建一个作用域,将自己的作用域限制在大括号中
const关键字
不能改变值
声明必须赋值
2.箭头函数
用来简写函数
例:使用箭头函数定义一个返回m到n范围内的随机数的函数:
let fn = (m,n) => parseInt(Math.random()*(n-m+1))+m;
3.函数默认值
以前的函数不能有默认值,es6的函数中可以定义默认值:
let add = (a,b=2) => a+b;
console.log(add(5));
4.模板字符串
es6新增了定义字符串的方式,使用反引号
-
可以换行书写,保持字符串中的换行和空格
-
模板字符串中可以识别变量,使用美元符大括号:
${变量}
`${变量}`
5、解构赋值
解析一个数据结构并赋值,可以快速的从对象或数组中取出需要的内容,对象使用大括号,数组使用中括号
5.1解构对象
let obj = {
name:"张三",
age:12,
sex:"男",
wife:{
name:"翠花",
age:11,
}
}
let {name:uname,age:a} = obj
console.log( {name:uname,age:a} ); // 张三,12
let {wife} = obj; //name: "翠花"
let {name} = wife; // wife: {name: '翠花', age: 11}
// 写为一行
let {wife:{name:wname}} = obj; //
- wife:
- name: "翠花"
5.2、解构数组
let arr = [1,2,3];
let [num1] = arr; // 从数组中拿出第一个元素赋值给num1变量
解构数组的时候是按顺序取出数组中的值,解构一个变量,只能拿到第一个元素
let arr = [1,2,3];
let [num1,num2] = arr; // num1 = arr[0] num2 = arr[1]
多维数组解构:
let arr = [1,2,3,[4,5,6]];
let [a,b,c,[aa,bb]] = arr;
console.log(aa,bb); // 4 5
利用结构交换两个变量的值:
let num1 = 1;
let num2 = 2;
[num2,num1] = [num1,num2]
6、展开运算符
将一个数组展开为多个变量赋值给多个形参
let arr = [1,2,3];
function fn(a,b,c){
console.log(a,b,c); // 1 2 3
}
fn(...arr);
利用展开运算合并数组
// 之前的写法
let arr = [1,2,3];
let arr1 = [4,5,6].concat(arr);
// 利用展开运算合并
let arr2 = [4,5,6].concat(...arr);
// 再简化
let arr3 = [4,5,6,...arr]
利用展开运算合并对象:
const obj = {
name:"Jack",
age:20,
sex:"男",
}
const obj1 = {
...obj,
wife:{
name:"Rose",
age:18
}
}
console.log(obj1); //
- Object
- age: 20
- name: "Jack"
- sex: "男"
- wife: {name: 'Rose', age: 18}
7、合并运算符
将多个实参合并为一个数组
function fn(...arr){
console.log(arr);
}
fn(1,2,3); // [1,2,3]
箭头函数中没有arguments,可以使用合并运算符来模拟arguments
var fn = (...arr) => {console.log(arr)};
fn(1,2,3); // [1,2,3]
8、对象的简写方式
let name = '张三';
let age = 12;
let obj = {
name,
age
}
console.log(obj);//
- Object
- age: 12
- name: "张三"
如果对象的属性名和变量名同名,则可以光写属性名
9、Map
map是es6提供的一种对象类型,用于存储键值对。跟object不同的地方在于:
-
object键值对:字符串->值
-
map键值对:值->值
定义map数据: var m = new Map()
10、Set
set是es6新增的一种对象类型,用于存储多个键。也就是说,set数据中不会有重复的数据。
定义语法:new Set([多个数据])
。定义语法使用[]
,如果[]
中重复的数据,会被set去重。
11、for...of
for in用来遍历键。可以遍历的数据如下:
-
可以遍历object类型,只要类型是object就能遍历,但能遍历的只有可遍历/可枚举的属性,(也就是enumerable属性为true的属性);
-
可以遍历数组,但遍历出来的下标是字符串,遍历数组的时候会将数组的下标作为键
-
可以遍历字符串,遍历出来的下标也是字符串
-
如果对象的原型中有可遍历的属性,会将原型中的可遍历属性也遍历出来。如果原型中的可遍历属性和对象本身的可遍历属性重名,就只遍历对象本身的属性了。
for of用来遍历值。可以遍历的数据如下:
-
可以遍历数组,遍历出来的是数组中的每个元素
-
可以遍历字符串,遍历出来的是字符串中的每个字符
-
可以遍历set集合。
-
可以遍历Map集合
-
不可以遍历对象
12、ES6的类
ES6中定义类的语法: class 类的名字{}
类只有一个作用,就是定义对象,定义对象的语法:
var 对象 = new 类
类的本质,其实还是一个函数,只是换了一种形式,这种形式只能用来定义类,而不能当做构造函数调用了。
此时对象是空对象,要给对象中添加属性,就要在类中定义:
class 类的名字{
属性名 = 值 // 方法1
// 方法2
constructor() {
this.属性名 = 值
}
}
在new类的时候,传递的实参,其实是传递给了constructor,contructor方法只会在new类的时候执行一次。
13、ES6的继承
在ES6的类中定义的对象,实现继承有继承的语法:
class 子类 extends 父类{}