es6新增的特性
- let,const关键字
- 箭头函数
- 模板字符串
- map,set
- 数组新增方法(Array.from(),includes(),map(),filter(),forEach(),find(),some(),every())
- 对象新增方法(Object.is()、Object.assign()、Object.keys()、Object.values()、Object.entries())
- 解构赋值
- class类
- moudule导入导出
- promise对象
- async/await异步函数(ES7)
- gennertor/yield
let,const,var对比
- let,const申明变量不存在变量提升
- let,const申明变量不允许重复
- let,const申明变量存在块级作用域,对比var不会污染外层变量
- let,var申明可不设初始值,const不需设置
- const申明变量不可改变,引用变量通过指针改变属性
- let,const引用之前变量名不能使用,又称为暂时性死区
箭头函数
- 箭头函数相比普通函数更简洁,可省略function和花括号,入(a,b)=>a+b
- 箭头函数没有自己的this,它会捕获其所在上下文的this值作为自己的this值,这个值在函数定义时就确定并固定了。因此,箭头函数的this不能通过call、apply、bind等方法改变。普通函数this的值是在函数被调用时确定的,它指向调用该函数的对象或全局。普通函数的this可以通过call、apply、bind等方法改变。
- 箭头函数在单一入参的情况下可以省略括号,在只有一条语句的情况下可以省略花括号,作为回调函数还可以省略return
- 箭头函数没有自己的arguments对象,但可以通过剩余参数(...args)或访问外层函数的arguments对象来间接访问参数。箭头函数不能创建自己的prototype属性,因此不能用作构造函数
- 箭头函数不能用作Generator函数,因为它没有yield关键字
模板字符串
let a = `我是一个模板字符串${str}str是变量`
map,set
map
- Map是一种键值对的集合,和对象不同的是,键可以是任意值
- Map可以便利,可以和各种数据格式转换
- Map中键值对是有序的
let oneMap = new Map();
oneMap.set("name", "狗蛋");
oneMap.set("sex", "男or女");
console.log(oneMap.get("name"));
oneMap.delete("sex");
console.log(oneMap.has("sex"));
for (let item of oneMap) {
console.log(item); //['name', '狗蛋'] ['age', '101']
}
oneMap.forEach((k, v) => {
console.log(k); //为键值
});
oneMap.clear();
console.log(oneMap);
set
- set是类似数组的一种的数据结构,类似数组的一种集合,但在Set中没有重复的值
let oneSet = new Set();
oneSet.add("狗蛋");
oneSet.add("狗剩");
oneSet.delete("狗子的");
oneSet.has("狗子的");
console.log(oneSet.size);
oneSet.clear()
map与object的区别
- map的键名可以使任意数据类型,而object的键名只能是字符串或者Symbol
- map的键值对插入式有序的,而object是无序的
- map可以通过for-of遍历键值对,而object只能手动遍历键值对
- map没有继承关系,而object是所有对象的基类
- map直接通过size属性访问,object只能手动计算,通过Object.keys()方法或者通过for…in循环统计
set与Array的区别
- set数据不能重复,Array可以重复
- set无序结构,操作更快,array有序结构,操作更慢
- set没有下标概念,无法通过下标获取,array可以通过下标访问
数组新增方法
- Array.from()是 JavaScript 中的一个静态方法,用于将类数组对象或可迭代对象(比如 Set、Map 等)转换成一个新的数组
console.log(Array.from("我是谁")); //['我', '是', '谁'] 将字符串转化为数组
console.log(Array.from(new Set([1, 2, 3, 4]), item => item + 1)); //[2, 3, 4, 5] 将类数组转化
- includes(),map(),filter(),forEach(),find(),some(),every()
对象新增方法
- Object.is() 用于比较两值是否相等 Object.is(a,b) 返回true或者false
- Object.assign() 浅拷贝,对象合并等等
- Object.keys()、Object.values()
- Object.entries():console.log(Object.entries({ name: 1, sex: "男" })); //[['name', 1],['sex', '男']]
promise对象
- 三种状态 resolve, reject,peeding
- 两种结果then,catch
let me = new Promise((resolve, reject) => {
resolve("我成功了");
});
me.then(res => {
console.log(res);
});
async/await异步函数
await等待执行结果
let me = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("我成功了");
}, 500);
});
let a = await me;
console.log(a);
console.log("1");
// 1 我成功了