数组的扩展
数组的扩展
  Array.from()
    用于将两类对象转为真正的数组
      类似数组的对象（array-like object）
      可遍历（iterable）的对象
  Array.of()
    用于将一组值，转换为数组
  copyWithin()
    将数组中某位置到某位置的数据复制，然后到从指定位置开始替换对应长度的数据
    返回当前数组，即会改变原数组
  find()
    遍历数组成员并执行回调，返回第一个符合条件的数组成员
    返回第一个执行回调后返回值为true的成员没有找到返回undefined
  findIndex()
    跟find方法类似，只不过是查找第一个符合条件的数组成员的index值
    返回第一个符合条件的成员的index
  fill()
    用于填充数组，将要填充的东西填充到指定的位置
    返回填充修改后的数组，即会改变原数组
  entries()，keys() , values()
    keys()是对键名的遍历，values()是对键值的遍历，entries()是对键值对的遍
    都返回一个遍历器对象
  includes()
    用于判断给定值是否包含在数组中
    返回true或false
  flat()
    用于将数组拉平或者叫拍平，拍平的深度取决于传递的参数，默认为2,表示拍平二维数组
    返回拍平后的数组，不改变原始数组
  flatMap()
    对原数组的每个成员执行一个函数（相当于执行Array.prototype.map()），然后对返回值组成的数组执行flat()方法
    该方法返回一个新数组，不改变原数组。
  数组的空位
    Array(3)返回一个具有 3 个空位的数组
      Array(3) // [, , ,]
    注意，空位不是undefined，一个位置的值等于undefined，依然是有值的
    空位是没有任何值，in运算符可以说明这一点
      0 in [undefined, undefined, undefined] // true
0 in [, , ,] // false
    ES5 对空位的处理，已经很不一致了，大多数情况下会忽略空位
      orEach(), filter(), reduce(), every() 和some()都会跳过空位
      map()会跳过空位，但会保留这个值
      join()和toString()会将空位视为undefined，而undefined和null会被处理成空字符串。
    由于空位的处理规则非常不统一，所以建议避免出现空位
  Array.prototype.sort() 的排序稳定性
    ES2019 明确规定，Array.prototype.sort()的默认排序算法必须稳定