欢迎来到 jackNEss'窝窝
I like simple mind

重新认识 Array

2011年10月01日

重新认识 Array

作为javascript中十分常用的一种数据类型——Array,我觉得是有必要对其完全掌握,从而写出最最最优雅的代码,以下从Array对象的创建说起,给大家介绍 Array中所有的属性和方法,一步一步地为大家介绍这位 Array君。


文章目录:

Array对象的创建

一般数组创建

创建 array数组有 2 种方法:

//javascript

//方法一
var a = new Array();

//方法二
var a = [];

当然,也可以带参数的进行 array 数组初始化:

//javascript

//方法一
var a = new Array(1,2,3);

//方法二
var a = [1,2,3];

同样地,可以和其他严谨的编译语言如C++、C#、java等,我们可以先预先给数组分配空间:

//javascript
var a = new Array(10);

作为弱语言的 javascript,在同一个数组的元素里面可以具有任意的数据类型,这种特性和.net2.0后新增的类 ArrayList 相似。

//javascript
var a = ["javascript",document.getElementById("is"),1,true];

数组的输出采取 a[n] 的形式,其中 n 为a的下标,从0开始算起,例如:

var a = [1,2,3,4,5]
alert(a[0]);//输出结果:1
alert(a[1]);//输出结果:2
alert(a[2]);//输出结果:3
alert(a[3]);//输出结果:4
alert(a[4]);//输出结果:5
alert(a[5]);//输出结果:报错,因为所要获取的数据已超出了数组的长度

然后告诉大家一个很有趣的东西

//javascript
var a = [];
a[5.20] = "jackNEss";
alert(a[5.20]);//输出结果:jackNEss

以上这种写法是work的,float类型也可以作为数组的下标,不过实际上,在javascript中,当你使用负数,浮点数或者布尔值,对象等,javascript都会自动地将这些数据转换成一个 string 字符串,上面的例子其实就是给 a 创建一个名为 “5.20″的属性,等价于:

//javascript
var a = [];
a["Sagittarius"] = "jackNEss";//由于浮点数的 “.”和属性调用的“.”有冲突,所以这里用字符串代替,原理是一样的。
alert(a.Sagittarius)//输出结果:jackNEss

值得一赞的是,不同于C/C++/C#,javascript数组的创建是不需要预先分配空间的,告诉程序这个数组的长度是多少,然后再去写入数据。javascript的数组是随着数组长度的增加而自动分配的,不需要预先分配,相对而言,用起来就更加灵活了。


二维数组创建

不同于C/C++/C#,在javascript中,二维数组的创建是没有直接的方法的。不过,值得欣慰的是,在javascript中,可以对其进行模拟。

在javascript中,是通过这样的方法进行二维数组创建的。

//javascript
var a = new Array([1,2],[2,3],[3,4]);	

即通过数组里面放置另一个数组,从而实现二维数组。调用方法:

//javascript
a[0][0];


多维数组创建

多维素组的创建方法和二维的大同小异,也是通过数组里面放置数组来实现。


Array对象的属性

length

正如字面意思,就是获取素组的长度。

var a = [1,2,3,4,5]
alert(a.length);//5


constructor

获取当前对象的数据类型。

//javascript
var a = [1,2,3,4,5];
alert(a.constructor === Array)//输出结果:true

var b = new String();
alert(b.constructor === String)//输出结果:true
	


prototype

使您有能力向对象添加属性和方法。

//javascript

//给 Array添加新方法,获取数组第一个元素
Array.prototype.firstChild = function(){
	return this[0];
}
var a = [1,2,3,4,5];
alert(a.firstChild())//输出结果:1


Array对象的方法

concat()

连接两个或更多的数组,并返回结果。

语法

//javascript
arrayObject.concat(arrayX,arrayX,......,arrayX)
参数 描述
arrayX 必填。该参数可以是具体的值,也可以是数组对象。可以是任意多个。

返回值

返回一个合并后的数组

//javascript
var a = [1,2,3];
var b = [4,5,6];
var c = a.concat(b);

alert(a);//输出结果:1,2,3
alert(b);//输出结果:4,5,6
alert(c);//输出结果:1,2,3,4,5,6
//javascript
var a = [1,2,3];
var b = 4;
var c = a.concat(b);

alert(c);//输出结果:1,2,3,4
alert(a.concat(4,5,6))//输出结果:1,2,3,4,5,6


join()

join() 方法用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。

语法

//javascript
arrayObject.join(separator);
参数 separator
arrayX 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔

返回值

返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。

//javascript
var a = [1,2,3,4,5,6];

alert(a.join("|"))//输出结果:1|2|3|4|5|6


pop()

pop() 方法用于删除并返回数组的最后一个元素。

语法

arrayObject.pop()

返回值

arrayObject 的最后一个元素。

说明
pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

//javascript
var a = [1,2,3,4,5,6];
var b = a.pop();
alert(a);//返回结果:1,2,3,4,5
alert(b);//返回结果:6


push()

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

语法

//javascript
arrayObject.push(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。要添加到数组的第一个元素。
newelement2 可选。要添加到数组的第二个元素。
newelementn 可选。可添加多个元素。

返回值

把指定的值添加到数组后的新长度。

说明
push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。

//javascript
var a = [4,3,2];
var b = a.push(1);

alert(a);//返回结果:4,3,2,1
alert(b);//返回结果:4


reverse()

reverse() 方法用于颠倒数组中元素的顺序。

语法

arrayObject.reverse();	

该方法会改变原来的数组,而不会创建新的数组。

//javascript
var a = [1,2,3,4];
a.reverse();

alert(a);//返回结果:4,3,2,1


shift()

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

语法

//javascript
arrayObject.shift()

返回值

数组原来的第一个元素的值。

说明

如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。请注意,该方法不创建新数组,而是直接修改原有的 arrayObject。

注意:该方法会改变数组的长度。

//javascript
var a = [1,2,3,4];
var b = a.shift();

alert(a);//返回值:2,3,4
alert(b);//返回值:1


slice()

slice() 方法可从已有的数组中返回选定的元素。

语法

//javascript
arrayObject.slice(start,end)
参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

返回值

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

说明

请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

//javascript
var a = [7,8,9,10];
var b = a.slice(1,3);

alert(a);//返回值:7,8,9,10
alert(b);//返回值:8,9


sort()

sort() 方法用于对数组的元素进行排序。

语法

//javascript
arrayObject.sort(sortby)

返回值

对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

说明

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
//javascript

//按数值大小进行排列

//由大到小
function sortUpperNumber(a,b){
	return a - b;
}

//由小到大
function sortLowerNumber(a,b){
	return b - a;
}

var a = [7,8,9,10,6,4,3,2,1];

alert( a.sort(sortUpperNumber) );//返回值:1,2,3,4,5,6,7,8,9,10
alert( a.sort(sortLowerNumber) );//返回值:10,9,8,7,6,5,4,3,2,1
//javascript

//按字符编码进行排列
var a = ["jackNEss","lucy","elusa","gray","nazi","Happy"];

alert( a.sort() );//返回值:Happy,elusa,gray,jackNEss,lucy,nazi
alert( a.sort().reverse() );//返回值:nazi,lucy,jackNEss,gray,elusa,Happy


splice()

splice() 方法用于插入、删除或替换数组的元素。

语法

//javascript
arrayObject.splice(index,howmany,element1,.....,elementX)
参数 描述
index 必需。规定从何处添加/删除元素。
该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 必需。规定应该删除多少元素。必须是数字,但可以是 “0″。
如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。
elementX 可选。可向数组添加若干元素。

返回值

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

说明

splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

//javascript

var a1 = [1,2,3,4,5,6,7];
var b1 = a1.splice(0,6,"jackNEss");

var a2 = [1,2,3,4,5,6];
var b2 = a2.splice(0,6);

alert(a1);//返回值:jackNEss,7
alert(b1);//返回值:1,2,3,4,5,6


alert(a2);//返回值:7
alert(b2);//返回值:1,2,3,4,5,6


toString()

toString() 方法可把数组转换为字符串,并返回结果

语法

//javascript
arrayObject.toString()

返回值

arrayObject 的字符串表示。返回值与没有参数的 join() 方法返回的字符串相同。

//javascript

var a = [1,2,3,4,5,6,7];
var b = a.toString();

alert(a);       //返回值: 1,2,3,4,5,6,7
alert(typeof a);//返回值:object (说明toString并没有改变a的类型)

alert(b);       //返回值: 1,2,3,4,5,6,7
alert(typeof b);//返回值:string


toLocaleString()

定义和用法

把数组转换为本地字符串。

语法

//javascript
arrayObject.toLocaleString()

返回值

arrayObject 的本地字符串表示。

说明

首先调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。

//javascript

var a = [1,2,3,4,5,6,7];
var b = a.toLocaleString();

alert(a);       //返回值: 1,2,3,4,5,6,7
alert(typeof a);//返回值:object (说明toLocaleString并没有改变a的类型)

alert(b);       //返回值: 1,2,3,4,5,6,7
alert(typeof b);//返回值:string


unshift()

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

语法

//javascript
arrayObject.unshift(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。向数组添加的第一个元素。
newelement2 可选。向数组添加的第2个元素。
newelementX 可选。向数组添加的第X个元素。

返回值

arrayObject 的新长度。

说明

unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。

请注意,unshift() 方法不创建新的创建,而是直接修改原有的数组。

提示和注释

该方法会改变数组的长度。

unshift() 方法无法在 Internet Explorer 中正确地工作!(在IE8以下浏览器 unshift方法不具有返回值)

//javascript

var a = [1,2,3,4,5,6,7];
var b = a.unshift(0);

alert(a);//返回值: 0,1,2,3,4,5,6,7
alert(b);//返回值:8(ie8+,firefox,opera,chrome等现代浏览器)|nudefined(ie7,ie6)


valueOf()

valueOf() 方法返回 Array 对象的原始值

该原始值由 Array 对象派生的所有对象继承。

valueOf() 方法通常由 JavaScript在后台自动调用,并不显式地出现在代码中。(依书直说而已,说真,不知干嘛的…)

//javascript
arrayObject.valueOf()
分类javascript
标签, ,
阅读 3,119
  • 评论加载中...

标签云

分类目录

最新留言

  • 评论加载中...

与我联系

如有疑问or建议可通过以下方式跟我取得联系.

Q Q:373435871
Email:jackness1208@gmail.com
© Copyright 2011 - 2014 jackNEss.org All Rights Reserved 粤ICP备14065612号
首页 | 关于我 | 网站地图 | RSS