一、创建数组

1-1 arr创建

  1. var arr=[1,2,3];

1-2 使用构造函数的方式创建一个数组

  1. var obj = new Array(1,2,3);
  2. console.log(obj)
  3. /* for in */
  4. for(var key in arr){
  5. console.log(arr[key])
  6. }

二、数组元素

2-1 数组元素可以是字符,布尔值,数字

var a=Array("reing",1890,true)

2-2 数组元素是变量

var name="join"
var beatles=Array();
beatles[0]=name
console.log(name)          //join

2-3 数组元素是另一个数组的元素,是另一个数组

var names=Array("raing","john","gepge","paul")
var beatles=Array();
beatles[0]=names[3]
console.log(names)      // ["raing", "john", "gepge", "paul"]

var names=Array("raing","john","gepge","paul")
var beatles=Array();
beatles[0]=names
console.log(names)     // ["raing", "john", "gepge", "paul"]

三、关联数组

       var lennon=Array();
       lennon["name"]="john"
       lennon["year"]=1930
       lennon["living"]=false
       console.log(lennon)           //[name: "john", year: 1930, living: false]

3-1 访问另一个数组的元素

      var lennon=Array();
      lennon["name"]="john"
      lennon["year"]=1903;
      lennon["living"]=false
      var beatles=Array();
      beatles[0]=lennon
      console.log(lennon["name"])       //john

      var lennon=Array("jong",2090,false)
      var beatles=Array();
      beatles[0]=lennon;
      console.log(beatles[0][0])       //jong

四、伪数组

4-1 什么是伪数组

伪数组,就是像数组一样有 `length` 属性,也有 `0、1、2、3` 等属性的对象,看起来就像数组一样,但不是数。

伪数组特点:

1.拥有 length 属性。但是其length属性不会像真正的数组一样随着元素的添加删除自动更新

2.可以遍历伪数组,但是不具备数组的方法
var fakeArray = {
  "0": "first",
  "1": "second",
  "2": "third",
  length: 3
};

delete fakeArray["2"]; //fakeArray中的length不会发生更新

for (var i = 0; i < fakeArray.length; i++) {
  console.log(fakeArray[i]);
}

// 此时fakeArray虽然具备length属性,但是不能直接调用数组的方法
// 伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多算法,比如:
Array.prototype.join.call(fakeArray,'+');
Array.prototype.push.call(fakeArray, 'd')
//上面代码的含义:当前的fakeArray对象没有join方法,但是Array.prototype中有,可以将
Array.prototype.join中的this改为当前的fakeArray,然后用"+"号进行拼接

4-2 常见的伪数组

  • 函数内部的 arguments
  • DOM 对象列表(比如通过 document.getElementsByTags 得到的列表)
  • jQuery 对象(比如 $("div")

    4-3 小结

  • 伪数组是一个 Object,没有数组 Array.prototype 的属性值,而真实的数组是一个 Array。

  • 数组是基于索引的实现, length 会自动更新;而Object对象是键值对
  • 伪数组不可以直接调用数组的方法,但是可以通过原型call方式间接调用数组中的方法