目录
1、ES5
2、ES6的理解
3、ES6
4、ES7
5、ES8
正文
1、ES5
Object.keys():对象的所有属性。 原文链接
- 对象:返回属性名。例:console.log(Object.keys({a:1,b:2,c:9,d:4,e:5}));//["a", "b", "c", "d", "e"]
- 字符串:返回索引。例:console.log(Object.keys('ab1234')); //[0,1,2,3,4,5]
- 数组:返回索引。例:console.log(Object.keys(["a", "b", "c"])); // console: ["0", "1", "2"]
2、ES6的理解
- ES6是一个新的标准,它包含了许多新的语言特性和库,是JS实质性的一次升级。
比如'箭头函数'、'字符串模板'、'generators(生成器)'、'async/await'、'解构赋值'、'class',引入module模块概念。
3、ES6 原文链接 官网 原文链接
- (1)变量声明:let、const
var声明的变量会挂载在window上,而let和const声明的变量不会。
var声明变量存在变量提升,let和const不存在变量提升。
let和const声明形成块作用域。
同一作用域下let和const不能声明同名变量,而var可以。
const:声明后不能修改;如果声明的是复合类型数据,可以修改其属性。 - (2)字符串模板:将变量放在花括号中。例:
var name=`Your name is ${first}${last}`
- (3)解构赋值
- (4)箭头函数
用了箭头函数,this就不是指向window,而是父级。
不能够使用arguments对象。 原文链接
不能用作构造函数,这就是说不能够使用new命令,否则会跑出一个错误。
不能使用yield命令,因此不能用作Generator函数。 - (5)Set去重 例:
console.log([...new Set([1,22,33,44,22,44,6])]) // [1,22,33,44,6]
- (6)类:calss。可以看作是一个语法糖,它的绝大部分功能ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法。
- (7)函数参数默认值
- (8)延展操作符(展开运算符):...
- (9)对象简写
- (10)异步编程:promise 原文链接
Promise 是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更合理、更强大。
使用async/await,搭配promise,可以通过编写形似同步的代码来处理异步流程,提高代码的简洁性和可读性async用于声明一个function是异步的,而await用于等待一个异步方法执行完成。
回调函数缺点:代码臃肿、可读性差、耦合度过高,维护性差、代码复用性差、容易滋生bug、只能在回调里处理异常。
须知:Promise新建后立即执行,Promise.then()内部的代码在当次事件循环的结尾立即执行。
resolve函数将Promise对象的状态从“未完成”变为“成功”(pending--->resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。
reject函数将Promise对象的状态从“未完成”变为“失败”(pending--->rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
而状态一旦改变,就不会再变。也只能resolve一次,剩下的调用会被忽略。
.then 或者 .catch 的参数期望是函数,传入非函数则会发生值穿透。
.then 或者 .catch 中抛出错误方式:return Promise.reject(new Error('error!!!')) || throw new Error('error!!!') - (11)循环
forEach:ES5数组方法,遍历数组。
map:ES5数组方法,遍历数组返回一个新数组。
for in:一般用来遍历对象或json。
for of:ES6。数组对象都可以遍历。遍历对象需要通过Object.keys()。原文链接
for in:循环出的是key。for of:循环出的是value。 - (12)导入导出
import:导入。例:import {fn} from "./index1.js"。
export:导出。例:export value。 - (13)Proxy代理 原文链接proxy
使用代理(Proxy)监听对象的操作,然后可以做一些相应的事情。
将一个对象交给了Proxy代理,然后通过编写处理函数,来拦截目标对象的操作。 - (14)Symbol类型 原文链接
Symbol是由ES6规范引入的一项新特性,它的功能类似于一种标识唯一性的ID。通常情况下,我们可以通过调用Symbol()函数来创建一个Symbol实例,例:let s1 = Symbol()
访问对象中的Symbol:
1、使用Object的API:Object.getOwnPropertySymbols(obj);
2、使用新增的反射API:Reflect.ownKeys(obj)。
4、ES7
- includes():用来判断一个数组是否包含一个指定的值。如果包含则返回true,否则返回false。
- 指数操作符:**。具有与Math.pow()等效的计算结果。例:
console.log(Math.pow(2,3));console.log(2**3)
5、ES8
- async/await:它就是Generator函数的语法糖。使得异步操作变得更加方便。
- Object.values():返回一个数组,值为对象的所有值。
- Object.entries():返回一个给定对象自身可枚举属性的键值对的数组。