Skip to content

最近在做前端监控系统的时候用到很多es6 的特性,特此记录下来

var,let,const

新增2种变量定义域的关键词,

使用var 会导致许多个问题,会让变量提前声明,默认为全局变量,等等

而使用let 就不会出现.比如在for循环种

例如,

js
for(let i = 0;i < 10; i++){
   console.log(i);
}
console.log("循环体之外:" + i);//报错:letScope.html:5 Uncaught ReferenceError: i is not defined

此时let 就将变量i 封锁在循环中,如果我们使用var ,则会打印10,

const 则是类似Java 中的final 关键词类似,无法第二次给变量赋值

字符串模板

如果要在一堆字符串 拼接上我们的变量,则需要使用+进行拼接,这样操作下来,会导致字符串可读性大大降低,

针对这种情况,可以使用字符串模板

js
let name = "zs";
let string = `我的名字是${name}`
// 最后string 的值为  我的名字是zs

如果变量特别多,那么更应该使用这种字符串模板形式

解构

有这样一个需要,我们我们需要获取对象中的某一个值

通常会这样做

js
let a = obj.name;

而解构可以这样

js
let {name} =obj;

箭头函数

箭头函数 是简化function 的缩写

js
// 原始写法
const f=  function dom(){
    .....
}

//简化
const f= ()=>{
    .....
}

还有一种,在对象中使用

js
let obj = {
    f:function (){
    	.....
	}
}

// 简化
let obj = {
    f(){
    	.....
	},
    a(){
        
    }
}

Promise

异步任务,可以这样理解

其使用方法为

js
function dom(){
    return new Promise((resolve, reject)=>{
        // 在这里写业务代码
        
        //如果业务代码执行成功,则调用resolve()
        resolve(res)// 调用这个函数表示该异步任务结束,并返回res 变量
        
        // 如果业务代码执行失败,则调用reject()
        reject(res)// 调用这个函数表示该异步任务结束,并返回res 变量
    })
}

// then() 表示,如果执行成功后,则执行then 里面的内容,catch表示失败
dom().then(res=>{
    
}).catch(res=>{
    // 异步任务失败
})

async await

我们都知道js 是单线程操作,如果,我们在执行一个操作dom的操作的函数时,会阻塞主线程,

导致,修改了dom 了,但是界面还是没有变化,此时,我们需要 让这个方放是异步方放

js
async function dom(){
    .....
}

这样写了之后,便不会阻塞主线程,

还有种常用的方法,我们在使用 Promise的时候,会产生大量的then() 回调,阅读起来,十分不舒服,

因此,我们可以使用 async await 来简化 then

js
function dom(){
    return new Promise((resolve, reject)=>{
        // 在这里写业务代码
        
        //如果业务代码执行成功,则调用resolve()
        resolve(res)// 调用这个函数表示该异步任务结束,并返回res 变量
        
        // 如果业务代码执行失败,则调用reject()
        reject(res)// 调用这个函数表示该异步任务结束,并返回res 变量
    })
}

async function dom(){
    // 这样使用,会等待dom()返回结果,简化 then 方法回调
  const res =  await dom();
}

但是await 必须在async 方法内使用,原因其实很简单,

我们想要等待 异步任务,首先当前这个方法也必须是异步才行