Skip to the content.

没错,Array的深夜补番

创建Array对象的多种方式

Array对象用于在单个变量中储存多个值。通过以下语法可以创建:

new Array(); //空数组
new Array(size); //指定长度的数组
new Array(element0,element1,……,element); //带元素的数组

Array 对象属性

constructor

constructor属性返回对创建此对象的数组函数的引用。 看个例子:

var test = new Array();
if (test.constructor == Array) {
  console.log("This is an Array");
}else if(test.constructor==Boolean){
  console.log("This is a boolean");
}else if(test.constructor==Date){
  console.log("This is a Date");
}else if(test.constructor==String){
  console.log("This is a String");
}

// This is an Array

再看:

function employee(name, job, born) {
  this.name = name;
  this.job = job;
  this.born = born;
}

var bill = new employee("Bill Gates", "Engineer", 1985);
console.log(bill.constructor);  //[Function: employee]

length

length属性可以设置或返回数组中的元素个数。 值得注意的是,设置length属性可以改变数组大小。 如果设置的值比当前值小,那么数组将将被截断,其之后的元素将被丢弃。 如果设置的值比当前值大,数组将增大,新元素会被追加到数组的队尾,并标记值为undefined

var arr = Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log("Original length: " + arr.length) //Original length: 3
arr.length = 5
console.log("New length: " + arr.length) //New length: 5

proptotype

proptotype属性用于向对象添加属性和方法。看个例子:

function employee(name, job, born) {
  this.name = name;
  this.job = job;
  this.born = born;
}

var bill = new employee("Bill Gates", "Engineer", 1985);

employee.prototype.salary = null;
bill.salary = 20000;

console.log(bill.salary); //20000

Array 对象方法

concat()

concat()方法用于连接两个或多个数组。 值得注意的是:该方法不会改变现有数组,而是仅仅作为一个被连接数组对象的副本。 我们向数组连接新的元素,看代码:

var arr = [1, 2, 3];
console.log(arr.concat(4, 5)); //[ 1, 2, 3, 4, 5 ]

或者连接多个数组:

var arr = new Array()
arr[0] = "Joe"
arr[1] = "Joy"

var arr2 = new Array("Johy", "John")

var arr3 = ["Johnny"]

console.log(arr.concat(arr2, arr3)); //[ 'Joe', 'Joy', 'Johy', 'John', 'Johnny' ]

join()

join()方法用于把数组中的所有元素放入一个字符串,并通过指定的分隔符进行分隔(缺省是逗号)。 上代码:

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr.join()) //Joe,Joy,John
console.log(arr.join("-")) //Joe-Joy-John

pop()

pop()方法用于删除并返回数组的最后一个元素。 注意:如果删除成功,则数组长度减1,并返回删除的元素值;如果数组已经是空的,则数组不变,返回undefined

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr)        //[ 'Joe', 'Joy', 'John' ]
console.log(arr.pop())  //John
console.log(arr)        //[ 'Joe', 'Joy' ]
console.log(arr.pop())  //Joy
console.log(arr)        //[ 'Joe' ]
console.log(arr.pop())  //Joe
console.log(arr)        //[]
console.log(arr.pop())  //undefined

push()

push()用于向数组的队尾添加一个或多个元素,并返回新的长度。 注意:该方法直接修改了原来的Array对象和长度,而不是创建一个新数组。 push()pop()方法使用数组提供的先进后出栈的功能。

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr) //[ 'Joe', 'Joy', 'John' ]
console.log(arr.push("Johnny")) //4
console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]

unshift()

unshift() 用于向数组的队首添加一个或多个元素,并返回新的长度。 注意:该方法会改变数组的长度。unshift() 方法无法在 Internet Explorer 中正确地工作!

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr) //[ 'Joe', 'Joy', 'John' ]
console.log(arr.unshift("Johnny")) //4
console.log(arr) //[ 'Johnny', 'Joe', 'Joy', 'John' ]

reverse()

reverse()方法用于颠倒数组中元素的顺序。 注意:该方法会改变原来的数组,而不会创建新的数组。

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr) //[ 'Joe', 'Joy', 'John' ]
console.log(arr.reverse()) //[ 'John', 'Joy', 'Joe' ]
console.log(arr) //[ 'John', 'Joy', 'Joe' ]

shift()

shift()方法用于删除数组队首元素,并返回所删除的元素值。 注意:会改变数组长度。

var arr = new Array(3)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"

console.log(arr) //[ 'Joe', 'Joy', 'John' ]
console.log(arr.shift()) //Joe
console.log(arr) //[ 'Joy', 'John' ]

slice()

slice()方法可以从数组中返回指定区间的元素。 arrayObject.slice(start,end) 该方法接受两个参数: start,必要参数。指定起始位置,从0开始;如果是负数,则是从数组队尾开始算起,-1是队尾元素,-2是倒数第二个元素,以此类推。 end,可选参数,指定结束位置,即元素所在数组的下标数;如果没有指定该参数,则默认到队尾。同样的,end也接受负值,规则和start相同。 需要注意的是:该方法返回一个新数组但是不会改变原数组,其中包含从start到end(不包括end)的元素。

var arr = new Array(4)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"
arr[3] = "Johnny"

console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]
console.log(arr.slice(1)) //[ 'Joy', 'John', 'Johnny' ]
console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]
console.log(arr.slice(0,2)) //[ 'Joe', 'Joy' ]
console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]
console.log(arr.slice(-1)) //[ 'Johnny' ]
console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]
console.log(arr.slice(0,-2)) //[ 'Joe', 'Joy' ]
console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johnny' ]

sort()

sort()方法用于对数组的元素进行排序。 注意:该方法直接改变原数组,并最为返回对象。 对字母排序:

var arr = new Array(6)
arr[0] = "Cc"
arr[1] = "John"
arr[2] = "Bb"
arr[3] = "Ee"
arr[4] = "Aa"
arr[5] = "Dd"

console.log(arr) //[ 'Cc', 'John', 'Bb', 'Ee', 'Aa', 'Dd' ]
console.log(arr.sort()) //[ 'Aa', 'Bb', 'Cc', 'Dd', 'Ee', 'John' ]

对数组排序:

var arr = new Array(6)
arr[0] = "22"
arr[1] = "2"
arr[2] = "33"
arr[3] = "3"
arr[4] = "11"
arr[5] = "1"

console.log(arr) //[ '22', '2', '33', '3', '11', '1' ]
console.log(arr.sort()) //[ '1', '11', '2', '22', '3', '33' ]

但是呢,上面的代码并没有对数字的大小值进行排序,我们添加一个排序函数:

function sortNumber(a, b) {
  return a - b
}

var arr = new Array(6)
arr[0] = "22"
arr[1] = "2"
arr[2] = "33"
arr[3] = "3"
arr[4] = "11"
arr[5] = "1"

console.log(arr) //[ '22', '2', '33', '3', '11', '1' ]
console.log(arr.sort(sortNumber)) //[ '1', '2', '3', '11', '22', '33' ]

splice()

splice()方法用于向数组添加/删除/替换元素,然后返回被删除的元素。 注意:该方法会改变原数组。 该方法接受三个参数: index,必须。删除的起始节点。可为负,负数从队尾开始。 howmany,必须。要删除元素的数量。如果为0,则不会删除元素。 item,...itemX,可选(一个或多个元素)。替换节点区间内的元素。

var arr = new Array(4)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"
arr[3] = "Johy"

console.log(arr) //[ 'Joe', 'Joy', 'John', 'Johy' ]
console.log(arr.splice(2,0,"Johnny")) //[]
console.log(arr) //[ 'Joe', 'Joy', 'Johnny', 'John', 'Johy' ]
console.log(arr.splice(2,1,"JohnnyLuv")) //[ 'Johnny' ]
console.log(arr) //[ 'Joe', 'Joy', 'JohnnyLuv', 'John', 'Johy' ]

toSource()

toSource() 方法表示对象的源代码。 该原始值由 Array 对象派生的所有对象继承。 toSource() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。 只有 Gecko 核心的浏览器(比如 Firefox)支持该方法,也就是说 IE、Safari、Chrome、Opera 等浏览器均不支持该方法。

function employee(name, job, born) {
  this.name = name;
  this.job = job;
  this.born = born;
}

var bill = new employee("Bill Gates", "Engineer", 1985);
console.log(bill.toSource()); //TypeError: bill.toSource is not a function

//at FireFox
document.write(bill.toSource()); //({name:"Bill Gates", job:"Engineer", born:1985}) 

toString()、toLocaleString()、valueOf()

toString() 方法可把数组转换为字符串,并返回字符串。返回值与没有参数的 join() 方法返回的字符串相同。 注意:当数组用于字符串环境时,JavaScript 会调用这一方法将数组自动转换成字符串。但是在某些情况下,需要显式地调用该方法。数组中的元素之间用逗号分隔。 toLocaleString()把数组转换为本地字符串。 valueOf()方法返回 Array 对象的原始值。该原始值由 Array 对象派生的所有对象继承。valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。

var arr = new Array(4)
arr[0] = "Joe"
arr[1] = "Joy"
arr[2] = "John"
arr[3] = "Johy"

console.log(arr.toString()) //Joe,Joy,John,Johy
console.log(arr.toLocaleString()) //Joe,Joy,John,Johy
console.log(arr.valueOf()) //[ 'Joe', 'Joy', 'John', 'Johy' ]