数组是按次序排列的一组值,可定义时赋值也可以定以后赋值,值可以是任何类型,如果值为数组就形成多维数组。

  • 基本概念

    • typeof [] //"object"
    • 数组的键名也是字符串,用数字读取时JS会自动将数字转化为字符 串。由于[]是运算符,可以接受数值读取键名。
      var arr = ['a', 'b', 'c'];
      arr['0'] // 'a'
      arr[0] // 'a'
    • 只有是数组就有length属性,为数组键名最大值+1,JS数组length最大值为2*32-1。length值是可写的
      var arr = [ 'a', 'b', 'c' ];
      arr.length // 3
      arr.length = 2;
      arr // ["a", "b"]
      清空数组
      arr.length = 0;
      arr //[]
    • 非整数键名自动添加到数组的末尾(待考证),也可认为添加空位,值为undefined,length值不变
      var a = ['a'];
      a.length = 3;
      a[1] // undefined
    • in运算符,返回布尔值
      var arr = [ ,'a', 'b', 'c' ];
      2 in arr  // true
      '2' in arr // true
      4 in arr // false
      空位也返回false
  • 数组的遍历

    • for...in...,遍历所有键包括整数键和非整数键名,不推荐
      var a = [1, 2, 3];
      a.foo = true;
      for (var key in a) {
      console.log(key);
      }
      // 0
      // 1
      // 2
      // foo
    • for循环,所有数组的问题都可以在for循环基础上解决,可以使用关键字break停止,forEach不能停止
    • while循环
  • 数组的空位(hole)即某个位置没有值,不影响length属性。

    • delete命令也适合对象使用,形成空位。
    • 读取空位返回undefined和某个位置的值为undefined是不一样的概念,遍历时空位会被跳过。
  • 伪数组:不具有数组的特有方法的数组

    • 典型的伪数组:字符串,arguments对象,DOM元素集合等。
    • 伪数组转化为真正的数组
      • slice()
        let x = 'iainadengoegne'
        Array.prototype.slice.call(x)//["i", "a", "i", "n", "a", "d", "e", "n", "g", "o", "e", "g", "n", "e"]
        x[0]//"i"
      • ES6新增Array.from()