ES——新特性

92 阅读2分钟

1.let 和 const

  • let
      1.声明变量,仅在代码块内有效
      2.无变量提升
      3.一个作用域内不允许重复定义
    
  • const
      1.声明常量
      2.块级作用域有效
      3.letconst定义的变量,常量不属于全局对象  
    

2.Symbol

新增加的数据类型,表示独一无二的值。

3.变量的解构赋值

  • 内容:
      1.变量解构
      2.数组解构
      3.对象解构
      4.字符串解构
      5.函数参数解构
    
  • 应用:
      1.交换两个变量的值
      2.从函数返回多个值
      3.快速提取JSON数据
    

4.Set 和 Map

  •    Set
          和数组类似,但值不允许重复,且本质上是一个构造函数。
          1.属性
              Set.prototype.constructor
              Set.prototype.size:返回Set实例的成员总数
          2.方法
              Set.prototype.add(value):添加某个值,返回Set结构本身
                           .delete(value):删除某个值,返回布尔表示删除是否成功
                           .has(value):返回布尔表示该值是否为Set成员
                           .clear():清除所有成员
          4.遍历Set的方法
             Set.prototype.keys():返回键名的遍历器
                          .values():返回键值
                          .entries():返回键值对
                          .forEach():使用回调函数遍历每个成员
    
  •    Map
          和对象类似,提供了键值对的集合,但键可以是任意类型。
          Map结构还提供了"值-值"的对应,是一种更完善的Hash结构的实现。
          1.属性
              Map.prototype.constructor
              Map.prototype.size:返回Set实例的成员总数
          2.方法
              Map.prototype.set(key,value):添加键值对,返回Map结构本身。
              Map.prototype.get(key):通过键获取值,找不到返回undefinedMap.prototype.delete(key):删除某个键,返回trueMap.prototype.has(key):返回一个布尔值,表示某个键是否在当前Map对象中。
              Map.prototype.clear():清除所有成员,无返回值。
          3.遍历方法
              Map.prototype.keys():返回键名的遍历器
              Map.prototype.values():返回键值的遍历器
              Map.prototype.entries():返回所有成员
              Map.prototype.forEach():遍历Map的所有成员
    

5.循环遍历

 1.Iterator
     为各种数据结构提供统一的访问接口
     以下数据结构原生具备该接口:
         Array
         Map
         Set
         String
         TypedArray
         函数的arguments对象
         NodeList对象
     手写Iterator函数:
         function makeIterator(array){
             let nextNum = 0;
             return {
                 next:function(){
                     return nextNum < array.length ? {value:array[nextNum ++], done:false} : {value:undefined, done:true};
                 }
             }
         }
     调用Iterator的场合:
         1.解构赋值
         2.扩展运算符
         3.yield*
         4.数组遍历
     注意:
         
  2.for...of
  1.JavaScript原有的for...in循环只能获取对象的键名,ES6提供for...of循环,允许遍历获取键值。
  2.数组的遍历器接口只返回具有数字索引的属性。

6.字符串扩展

扩展运算符是三个点(...)
1.将一个数组转为逗号分隔的参数序列
2.可以用于函数调用
扩展运算符的应用:
    1.代替apply方法
    2.复制数组(对象)
    3.合并数组(对象属性)
    4.轻松将字符串转换为数组

7.数值扩展

Array.from()用于两类对象转为真正的数组(浅拷贝实例)
console.log(Array.from('foo'))
outputArray('f','0','0')
console.log(Array.from([1, 2, 3], x => x + x)
output:Array(2, 4, 6)

Array.of():用于将一组值,转换为数组。
Array.of(1, 2, 3)
output:Array(1, 2, 3);

Array.copyWithin(target, start, end):在当前数组内部,将指定位置的成员浅复制到其他位置(会覆盖原有成员),然后返回当前数组。

find():用于找出第一个符合条件的数组成员,参数是一个回调函数
    注意find函数和filter函数的区别:
        1.find函数直接返回值,filter函数返回数组结构
fill():使用给定值填充一个数组

8.函数扩展

箭头函数
    1.函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    2.不可以当做构造函数
    3.不可以使用arguments对象,如果要用,可以使用rest参数代替。
    4.箭头函数可以嵌套