ES6和ES5的区别

ES6引入了let和const命令,改变了变量声明的方式,带来了块级作用域。文章还提到了解构赋值、字符串遍历、模板字符串、箭头函数、以及新的数据结构Set和Map。此外,还讨论了Promise对象在异步编程中的应用。
摘要由CSDN通过智能技术生成
  1. ES6新增了let、const命令和块级作用域
  2. 声明变量的方法
    1. ES5
      1. function
      2. var
    2. ES6
      1. const
      2. let
      3. var
      4. function
      5. import
      6. class
  3. 全局变量和顶层对象(在浏览器中是window,node里是global)的属性脱离:为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
  4. 增加了解构赋值(即从数组和对象中提取值,对变量进行赋值)
    let {age,index}={age:10,index:1}
    console.log(age,index)

  5. 增加了字符串的遍历接口,就可以使用for...of...
  6. 模板字符串
    $('#result').append(`
      There are <b>${basket.count}</b> items
       in your basket, <em>${basket.onSale}</em>
      are on sale!
    `);//使用${}方变量
  7. 函数参数

    es5:
    function oo(obj){
        let re={}
        for(let i=0;i<arguments.length;i++){
            re[arguments[i]]=obj[arguments[i]]
        }
        return re
    }
    let o={
        age:'ji',
        name:12
    }
    
    
    es6:
    function oo(obj,...keys){
            let re={}
            for(let i=0;i<keys.length;i++){
                re[keys[i]]=obj[keys[i]]
            }
            return re
        }
    let o={
        age:'ji',
        name:12
    }
  8. 箭头函数没有this指向,内部this指向通过查找到最外层的作用域

    let add=(a,b)=>a+b
    console.log(add(1,3))//4
    1. 不能使用new,不是一个对象,是一个语法糖

    2. 没有arguments

  9. symbol:用于定义唯一的值

      const s1=Symbol('ii')
      const s2=Symbol('ii')
      console.log(s1 == s2)//false,保存的是对应的内存地址
      let obj={
        [s1]:1
      }
      console.log(obj[s1])
    //   获取以symbol作为对象的key的key
    for(let key in obj){
        console.log(key)//1
    }
    console.log(Object.getOwnPropertySymbols(obj))//[ Symbol(ii) ]
    console.log(Reflect.ownKeys(obj))
    
  10. set:集合,里面的值都是唯一的,可用于数组去重,对对象的引用为强引用,无法回收

    let set=new Set()
    set.add(1);
    console.log(set)//{1}
    set.add([2,3,4])
    console.log(set)//{1,[2,3,4]}
    set.delete(1)
    console.log(set)
    console.log(set.has([2,3,4]))//true
    set.forEach((value,key)=>{
        console.log(value)
        console.log(key)//set中键值相等
    })
    // s数组去重
    const arr=[1,2,3,4,5,6,6]
    let s= new Set(arr)
    s=[...s]
    console.log(s)//[1,2,3,4,5,6]
  11. map

    let w=new Map([['a',1],['dd','jk']])
    w.set(1,1)
    console.log(w)// { 'a' => 1, 'dd' => 'jk', 1 => 1 }
    console.log(w.has(1))//true
    console.log(w.get(1))//1
    w.set('name','hj')
    w.delete(1)
    console.log(w)//{ 'a' => 1, 'dd' => 'jk', 'name' => 'hj' }
  12. 数组的扩展

    // 类数组转为真正的数组
    function add(){
        return arguments
    }
    let srr=add(1,2,3)
    console.log(Array.from(srr))//[ 1, 2, 3 ]
    console.log([...srr])//[ 1, 2, 3 ]
    console.log(Array.of(...[1,2,3,4]))//[ 1, 2, 3 ,4]
    
    console.log([1,2,3,4].copyWithin(0,2))//[ 3, 4, 3,4 ]
    
    
    // 生成数组的迭代器
    let arr=[1,2,3,4]
    console.log(arr.keys())//返回键的迭代器
    for(let key of arr.keys()){
        console.log(key)
    }
    console.log(arr.values())//返回值的迭代器
    for(let value of arr.values()){
        console.log(value)
    }
    console.log(arr.entries())//返回键值对的迭代器
    for(let item of arr.entries()){
        console.log(item)
    }
    
    //判断数组是否包含元素
    let arr=[1,23,3]
    console.log(arr.includes(1))//true(es6)
    console.log(arr.indexOf(1))//0,无则是-1(es5)
    1. from

    2. of

  13. 迭代器

  14. 生成器

  15. promise:是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上来说是一个对象

         //Promise.race()
            function getImage(url) {
                return new Promise((reslove, reject) => {
                    reslove(url)
                })
            }
    
            Promise.race([getImage('222222'), new Promise((reslove, reject) => {
                setTimeout(() => {
                    reject(111)
                }, 1000)
            })]).then(res => {
                console.log(res)
            }).catch(err => {
                console.log(err)
            })//222222
            //Promise.all()
            let p1=new Promise((resolve,reject) => {
                resolve(1)
            })
            let p2=new Promise((resolve,reject)=>{
                resolve(12)
            })
            let p3=new Promise((resolve,reject)=>{
                reject(new Error('yyyyy'))
            })
            Promise.all([p1,p2,p3]).then(res=>{
                console.log(res)
            }).catch(err=>console.log(err))//Error: yyyyy
  16. async:返回一个promise对象

  17. 模块 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值