美文网首页
es6/7/8/9 新特性

es6/7/8/9 新特性

作者: TianTongBo | 来源:发表于2019-07-11 16:47 被阅读0次

    该文参考阮一峰著的ECMAScript 6 入门第三版

    目前主流浏览器已经完美兼容es6,这些新特性都被我们运用到实际的项目中,一些面试官也越来越多的面试喜欢问es6,es7,甚至es2019这些方面的问题,为了不掉队,现在就让我们一起回顾一下这些特性。

    es6

    let ,const 命令,一个声明变量。一个声明常量

    console.log(aa);
    var aa=11;
    console.log(bb);
    let bb=11;
    const PI=3.14;
    

    第一个输出aaundefined;第二个会报个错 Uncaught ReferenceError: Cannot access 'bb' before initialization 无法在初始化之前找到 bblet 没有声明提升,并且不可重复定义 Uncaught SyntaxError: Identifier 'bb' has already been declared 表示bb已经声明 const 一旦声明变量,此变量将不可被更改

    在作用域块内定义的变量,外部访问不到 { let aa = 11 }

    解构赋值

    let   [a,b,c,d=6]=[11,22,33];
    console.log(a,b,c,d)   //11,22,33,6
    let   [a,b,c,d=6]=[11,22,33,66]; 
    console.log(a,b,c,d)   //11,22,33,66
    let   [a,b,c,d]=[11,22,33]; 
    console.log(a,b,c,d)   //11,22,33,undefined
    

    数组的结构赋值要求一对一,如果没有对应则会变成undefined,

    对象也可以结构赋值

        let {a,b}={a:1,b:2}
        console.log(a,b)  //1 ,2
              
        let  {c,d}={a:1,b:2}    
        console.log(c,d)  //undefined , undefined
        
        let  {a:e,b:f}={a:1,b:2}
        console.log(e,f)    //   1,2
        
       let {foo,bar,p,p:{p1,p2}}=obj;          
       console.log(foo,bar,p,p1,p2) // 1 2 {p1: 3, p2: 4} 3 4
    

    这说明如果key值和变量名一样,则简写就可以,如果不同,则需 key:变量名

    字符串的扩展功能

    JSON.stringify()可以对Unicode码进行处理,并增加魔板字符串功能

    let  foo=123;
      let str=`
         <div>
            ` ${foo} `   
        </div> 
    `
    

    魔板字符串可以让拼接字符串更方便快捷!

    字符串新增方法

    String.fromCodePoint()可以识别Unicode返回对应的字符,类似于String.fromCharCode() 相反的则是 CodePointAt()charCodeAt()

    image.png

    String.raw()

    image.png

    includes(), startsWith(), endsWith()

    • includes() ;判断一个字符串中是否含有某个值,如果含有,则返回true,没有返回false,支持第二参数,第二个参数代表从第几位开始知道结束。;而indexOf() 有则返回字符串的索引值,没有则返回-1

      image.png
    • startsWith(), 判断字符串开头是否含有特定字符,返回true or false;支持第二个参数 ,第二个参数代表从第几位开始知道结束。

    • endsWith();判断字符串结尾是否含有特定字符,返回true or false;支持第二个参数 ,第二个参数代表从开头到第n位结束。


      image.png

    repeat(),padStart(),padEnd(),trimStart(),trimEnd();matchAll()

    • repeat(); 返回一个被重复过的字符串,里面的参数表示重复几次

    • padStart(),padEnd(),填充字符串,有2个参数,第一个表示返回新字符串的位数,第二个表示需要填充的字符,

    • trimStart(),trimEnd();去除字符串的空格,一个去除字符串头部的空格,一个去除尾部的空格。和trim()等同。

    • matchAll() 返回的是一个正则字符串遍历器,RegExpStringIterator {} 用展开运算符就可以查看到

      image.png
    image.png

    咱们发一下string;发现输出的是一个函数。那它肯定有个一个原型对象啊

    console.log(String)
    
    image.png
    console.log(String.property)
    
    image.png

    一些Number的方法 如parseInt,parseFloat,都嵌入到Number上了。Number.parseFloat()

    image.png

    函数的改变

    默认值函数,减少代码量,看起来更加清晰

           function test (x , y = 'haha'){
                    console.log(x,y) //1,haha
                }
                console.log(test(1))
    

    函数的形参也可以结构赋值,接下来让我们来看一看

           function test ({x , y = 'haha'}){
                    console.log(x,y) //2,haha
                }
                console.log(test({x:2}))
    
    image.png

    箭头函数

     let test= x=>console.log(x)
     test(2)  //2       当形参只有一个时,可以省略(),当执行语句只有一条时,可以省略{},this指向 书写函数的那一层、
    
    

    数组的扩展

    ...展开运算符

    console.log(...[1,2,3,4,5])  // 1,2,3,4,5
    

    Array.from() 可以把类数组对象,转换为数组
    Array.of 可以将一组数,转化为数组
    Array.find(),Array.findIndex(),array.copyWithin(target,start,end)
    array.fill() 初始化数组,填充数组,
    array.includes() 判断一个值是否在数组里
    keys(),valus().entries() keys是对键名的遍历,values是对键值进行遍历,entries是对键值对进行遍历,用next().value取得键值

    对象的扩展

    可以对属性进行简写

    let  name='张三';
    ley obj={
        name  
    }
    console.log(obj.name) //张三
    
    console.log(Object);
    
    image.png
    let obj = { foo: 123 };
    Object.getOwnPropertyDescriptor(obj, 'foo')
    
    image.png

    Object.assign() 两个参数,后一个对象复制给前一个对象,相当于浅拷贝、

    image.png

    Symbol的属性名都是独一无二的,

    let sym=Symbol('foo:11')
    console.log(sym)
    sym.description
    

    es2019新增 一个description方法可以把symbol属性的值变成字符串


    image.png

    set 和 map

              //set里都是不能重复的类数组对象
              let arr=new Set([1,2,3])
              console.log(arr)      // Set(3) {1, 2, 3}
              arr.add(4)
              arr.add(4,3) 
              console.log(arr)   //Set(4) {1, 2, 3, 4}
    

    Set 有方法 :has,add,delate ,clear
    同理 Map 是对对象进行操作的
    Map 有方法 :get,set,delate,has ,clear

    相关文章

      网友评论

          本文标题:es6/7/8/9 新特性

          本文链接:https://www.haomeiwen.com/subject/abedkctx.html