ES6笔记




1. 解构运算符
// let ary = [12, 13, 14, 23, 24, 13, 15, 12];
// let max = Math.max(...ary);  => // let max = Math.max.apply(null, ary);

3. es6克隆 let [...newAry] = ary; => var newAry = ary.slice(0); // let [, , , a = 0] = ary; // console.log(a);//=>0
 
 
四、数组
 数组实例方法:
fill( )实例方法: 把数组进行填充,它接收三个参数,第一个参数是填充的变量,第二个是开始填充的位置,第三个是截至位置
entries( )实例方法:
### arr.concat(arr2)   不适用于合并大的数组,因为它需要创建一个新的数组,而这会消耗很多内存   可以使用 Array.push.apply(arr1, arr2) 来代替创建新的数组
 
 Array.of(value1, value2, value3)  //多个值转换成数组  Array.from(伪数组/可遍历的对象)   
数组的遍历方法: for循环 map reduce forEach filter   回调函数参数统一为(item,index,array)形式  [参数arry作用是改变this指向array]
  every() 相当于&&。
  some()相当于||
  find(function(item, index, arr){return true})      findIndex()
PS:这几个方法**不会修改原数组**
2. 过滤filter()对数组中每一项运行回调函数 返回一个新的数组 由返回为true的数组项组成; find/findIndex只返回一项;
3. map() 映射 返回每一项;

 4、reduce()归并运算 接力,return值传给下一次  参数分别是(a,b,index) 多对一映射 (遍历开始为前两个值)

reduce的机理: a就表示遍历前一项return的值,b表示这一项的值(第一次遍历时a为第一项,b为第二项。return为遍历完成后返回)

应用: 
1. 求数组的最大值 var arr = [4,43,5,436,45,623,4,324,23,443,53,65,46,45,6,234,324]; var result = arr.reduce(function(a,b){ return a >= b ? a : b; }); console.log(result); //623 2. 求平均值 
  let arr = [2,3,5,7,8]
  let res = arr.reduce((a,b,index) =>{
    if (index      return a+b;
    }else{
      return (a+b)/arr.length;
    }
  });

- 调用Iterator接口场合:

  解构赋值  扩展运算符 Promise.all().race()  Array.from()遍历对象为数组;

 遍历:for ·· of 遍历iterable类型,只循环集合本身的元素  && for...in 用来遍历对象中可枚举的属性 [遍历的时候有自己的顺序:先遍历数字属性名(按照小->大),再遍历字符串属性名(按照书写顺序)]

 使用iterable内置的forEach方法,它接收一个函数 每次迭代就自动回调该函数。以Array为例

内置的可迭代对象并且有默认的迭代行为:

  Array Map Set String

  TypedArray
  函数的arguments类数组对象
  NodeList对象
注意,Object不符合可迭代协议。可以通过自定义迭代器方法 或其他对象的iterator接口实现  obj.__proto__[Symbol.iterator] = iterator;//生成要迭代的对象

五、对象的改变

  Map:映射   js对象的超集,

    map的key可以是任何类型  还可以是 DOM 元素。可以通过 size 属性很容易地得到一个 Map 的键值对个数,而对象的键值对个数只能手动确认

    初始化Map需要一个二维数组,或者直接初始化一个空Map : new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);

    Map键和内存地址绑定,两个空对象不相等。key排列按照添加顺序排列


同Set 实例的遍历方法 Map 实例的属性和方法如下: * `size`:获取成员的数量 * `set`:设置成员 key 和 value * `get`:获取成员属性值 * `has`:判断成员是否存在 * `delete`:删除成员 * `clear`:清空所有

在 Map 中新增键时,不会覆盖其原型上的键;而在 Object 中新增键时,则有可能覆盖其原型上的键:

JSON 默认支持 Object 而不支持 Map。若想要通过 JSON 传输 Map 则需要使用到 .toJSON() 方法,然后在 JSON.parse() 中传入复原函数来将其复原。

-使用 Map:
  储存的键不是字符串/数字/或者 Symbol 时,选择 Map,因为 Object 并不支持
  储存大量的数据时,选择 Map,因为它占用的内存更小
  需要进行许多新增/删除元素的操作时,选择 Map,因为速度更快
  需要保持插入时的顺序的话,选择 Map,因为 Object 会改变排序
  需要迭代/遍历的话,选择 Map,因为它默认是可迭代对象,迭代更为便捷
-使用 Object:

只是简单的数据结构时,选择 Object,因为它在数据少的时候占用内存更少,且新建时更为高效
需要用到 JSON 进行文件传输时,选择 Object,因为 JSON 不默认支持 Map
需要对多个键值进行运算时,选择 Object,因为句法更为简洁
需要覆盖原型上的键时,选择 Object

  Set:集合  数组拓展,

  集合成员的value都是唯一的 ,set只有value   keyvalue同值

  初始化:new Set(具有 iterable接口的数据结构)


Set 实例的属性和方法有 * `size`:获取元素数量。 * `add(value)`:添加元素,返回 Set 实例本身。 * `delete(value)`:删除元素,返回一个布尔值,表示删除是否成功。 * `has(value)`:返回一个布尔值,表示该值是否是 Set 实例的元素。 * `clear()`:清除所有元素,没有返回值。 Set 实例的遍历接口 * `keys()`:返回键名的遍历器。 * `values()`:同上;key value相同 * `entries()`:返回键值对数组的遍历器。 键值相等 * `forEach()`:使用回调函数遍历每个成员。
**WeakSet**: WeakSet 结构与 Set 类似,也是不重复的值的集合。                              但是,它与 Set 有两个区别。                         首先, WeakSet/(weakmap) 的成员只能是对象,而不能是其他类型的值。                                 其次, WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用, 也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。 这个特点意味着,无法引用 WeakSet 的成员,因此 WeakSet 是不可遍历的。 操作方法:                WeakSet.prototype.add(value) :向 WeakSet 实例添加一个新成员。               WeakSet.prototype.delete(value) :清除 WeakSet 实例的指定成员。                     WeakSet.prototype.has(value) :返回一个布尔值,表示某个值是否在 WeakSet 实例之中。   
symbol 全局标记声明,
  声明方式:使用全局Symbol('描述')函数
  对象key可以是字符串或者 Symbol类型   
  不能转str,num,可以转布尔值,