JS其实没有真正的数组,只是用对象来模拟数组
    对于没有数组共有属性的数组 成为伪数组

    典型的数组 和 JS数组对比**
    典型: 元素的数据类型相同 、 使用连续内存存储 、 通过数组下标取值

    JS数组:元素的数据类型可以不同、 JS存储是随机存储的,内存不一定是连续的

    新建数组:
    let arr = [1,2,3] === let arr = new Array(1,2,3)
    let arr = new Array(3) 创建一个长度为3的数组

    let arr3 = arr1.concat(arr2) 合并两个数组
    let arr4 = arr1.slice(1) /arr1.slice(0)
    从第二个/全部数组元素开始截取


    转化数组:
    let arr=’1,2,3’.split(‘,’) / let arr=’123’.split(‘’)
    Array.from(‘123’)


    数组的增删改查:

    在尾部加元素x
    arr.push(‘x’)
    在头部加元素x
    arr.unshift(‘x’)
    在中间加元素x
    arr.splice(X,0,’x’,’y’)

    删*改*
    let arr = [‘a’,’b’,’c’]
    delete arr[0] => arr = [empty , ‘b’, ‘c’] 能删除数组中的元素值

    arr.shift() 删除头部的元素
    arr.pop() 删除尾部的元素
    arr.aplice(X,1) 删除X数组的一个元素
    arr.aplice(X,1,’x’) 在删除X数组的一个元素,增加一个’x
    arr.aplice(X,1,’x’,’y’) 在删除X数组的一个元素,增加多个’x’’y’

    反转元素 arr.reverse() 修改元素顺序
    自定义顺序 arr.sort((a,b) => a-b)


    let arr = [1,2,3,4,5];
    arr.x=”xxx”;
    Object.keys(arr) // 打印出arr的元素值
    for(let key in arr){console.log(${key}:${arr[key]})} //打印出元素位置与元素值


    数组变换
    arr.map() 从N—N

    arr.filter() 从N——(n—) 从多变少

    arr.reduce() 从多变一