没错,
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' ]