JavaScript引用类型Array实例分析

1、ECMAScript数组的特点

(1)ECMAScript数组的每一项可以保存任何类型的数据。

(2)ECMAScript数组的大小是可以动态调整的。

2、创建数组

(1)使用Array构造函数(new操作符可省略)

var arr1 = new Array(); var arr2 = new Array(3); var arr3 = new Array("teacher", 3, true);

(2)使用数组字面量表示法

var arr1 = []; var arr2 = ["teacher", 3, true];

3、length属性

ECMAScript数组的length属性不是只读的,通过设置这个属性可以从数组末尾移除项或向数组中添加新项。

eg1:从数组末尾移除项

var arr = ["teacher", 3, true]; arr.length = 1; alert(arr[2]);//undefined

eg2:如果将length设置为大于当前数组长度的值,则新增的每一项都会取得undefined值

var arr = ["teacher", 3, true]; arr.length = 4; alert(arr[3]);//undefined

eg3:向数组中添加新项

var arr = ["teacher", 3, true]; arr[arr.length] = "doctor";

eg4:当一个值放在超出当前数组大小的位置上时,数组会重新计算其长度值,等于最后一项的索引加一。

var arr = ["teacher", 3, true]; arr[9] = "doctor"; alert(arr.length);//10

4、检测数组

(1)instanceof操作符

if (value instanceof Array) { ... }

适用范围:一个网页或一个全局作用域

问题:若网页中包含多个框架,则实际上存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。若从一个框架向另一个框架传入一个数组,那么传入的数组在与第二个框架中原生创建的数组分别具有各自不同的构造函数。

(2)Array.isArray()方法

if (Array.isArray(value)) { ... }

用途:确定给定值是否是数组,无论它是在哪个全局执行环境中创建的。

5、转换方法

(1)toString():返回每一项的字符串形式拼接而成的一个以逗号分隔的字符串,为了取得每一项的值,调用的是每一项的toString()方法。

(2)valueOf():返回的还是数组

(3)toLocaleString():为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。

(4)join():使用指定的分隔符来构建字符串

说明:alert()方法要接收字符串参数,所以它会在后台调用toString()方法。

eg1:

var friends = ["Alice","Bruce","Cindy"]; alert(friends.toString());//Alice,Bruce,Cindy alert(friends.valueOf());//Alice,Bruce,Cindy alert(friends.toLocaleString());//Alice,Bruce,Cindy alert(friends);//Alice,Bruce,Cindy alert(friends.join());//Alice,Bruce,Cindy alert(friends.join("|"));//Alice|Bruce|Cindy

eg2:

var person1 = { toLocaleString: function() { return "Alice"; }, toString: function() { return "Bruce"; } } var person2 = { toLocaleString: function() { return "Cindy"; }, toString: function() { return "David"; } } var person = [person1, person2]; alert(person);//Alice,Bruce alert(person.toString());//Alice,Bruce alert(person.toLocaleString());//Cindy,David

6、栈方法

(1)push():接收任意数量的参数,逐个添加到末尾,返回修改后数组的长度。

(2)pop():从数组末尾移除最后一项,数组的长度减一,返回移除的项。

var friends = new Array(); var len = friends.push("Alice","Bruce"); alert(len);//2 var friend = friends.pop(); alert(friend );//"Bruce" alert(friends.length);//1

7、队列方法

(1)shift():移除数组的第一项,数组的长度减一,返回移除的项。

(2)unshift():在数组前端添加任意数量的项,返回修改后数组的长度。

var friends = new Array(); var len = friends.unshift("Alice","Bruce"); alert(len);//2 var friend = friends.shift(); alert(friend );//"Alice" alert(friends.length);//1

8、重排序方法

(1)reverse():翻转数组项的顺序

(2)sort():按升序排列数组项

sort()方法会调用每项的toString()方法,然后比较得到的字符串。

var items=[0,1,3,15,18]; items.sort(); alert(items);//0,1,15,18,3

sort()方法可以接收一个比较函数作为参数:比较函数接收两个参数,若第一个参数应该位于第二个参数之前则返回一个负数;若两个参数相等则返回0;若第一个参数应该位于第二个参数之后则返回一个正数。

function compare(item1, item2) { if (item1 < item2) return -1; else if (item1 > item2) return 1; else return 0; } var items=[0,1,3,15,18]; items.sort(compare); alert(items);//0,1,3,15,18

对于数值类型或其valueOf()方法会返回数值类型的对象类型,可以简写比较函数。

function compare(item1, item2) { return item1 - item2; }

9、操作方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/85310b02299ea77cfb057a111b43a142.html