数组
我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,
数组中的数据可以是任何的数据类型.数组本身仍旧是对象,但是由于数组的很多特性,通常情况下把数组和对象区别
开来分别对待(Throughout this book, objects and arrays are often treated as distinct datatypes.
This is a useful and reasonable simplification; you can treat objects and arrays as separate types
for most of your JavaScript programming.To fully understand the behavior of objects and arrays,
however, you have to know the truth: an array is nothing more than an object with a thin layer of extra
functionality. You can see this with the typeof operator: applied to an array value, it returns
the string "object". --section7.5).
创建数组可以用"[]"操作符,或者是用Array()构造函数来new一个.
var array1 = []; //创建空数组 var array2 = new Array(); //创建空数组 array1 = [1,"s",[3,4],{"name1":"NAME1"}]; // alert(array1[2][1]); //4 访问数组中的数组元素 alert(array1[3].name1); //NAME1 访问数组中的对象 alert(array1[8]); //undefined array2 = [,,]; //没有数值填入只有逗号,则对应索引处的元素为undefined alert(array2.length); //3 alert(array2[1]); //undefined
用new Array()来创建数组时,可以指定一个默认的大小,其中的值此时为undefined,以后可以再给他们赋值.但是由于
javascript中的数组的长度是可以任意改变的,同时数组中的内容也是可以任意改变的,因此这个初始化的长度实际上
对数组没有任何的约束力.对于一个数组,如果对超过它最大长度的索引赋值,则会改变数组的长度,同时会对没有赋值
的索引处赋值undefined,看下面的例子.
var array = new Array(10); alert(array.length); //10 alert(array[4]); //undefined array[100] = "100th"; //这个操作会改变数组的长度,同时将10-99索引对应的值设为undefined alert(array.length); //101 alert(array[87]); //undefined
可以用delete操作符删除数组的元素,注意这个删除仅仅是将数组在该位置的元素设为undefined,数组的长度并没有改变.
我们已经使用过了数组的length属性,length属性是一个可以读/写的属性,也就是说我们可以通过改变数组的length属性来
任意的改变数组的长度.如果将length设为小于数组长度的值,则原数组中索引大于length-1的值都会被删除.如果length
的值大于原始数组的长度,则在它们之间的值设为undefined.
var array = new Array("n1","n2","n3","n4","n5"); //五个元素的数组 var astring = ""; for(var i=0; i<array.length; i++) { //循环数组元素 astring += array[i]; } alert(astring); //n1n2n3n4n5 delete array[3]; //删除数组元素的值 alert(array.length + "_" + array[3]) //5_undefined array.length = 3; //缩减数组的长度 alert(array[3]); //undefined array.length = 8; //扩充数组的长度 alert(array[4]); //undefined
对于数组的其他方法诸如join/reverse等等,在这就不再一一举例.
通过上面的解释,我们已经知道,对象的属性值是通过属性的名字(字符串类型)来获取,而数组的元素是通过索
引(整数型 0~~2**32-1)来得到值.数组本身也是一个对象,所以对象属性的操作也完全适合于数组.
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 //对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此) alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1
35 楼 aiyust070 2015-02-02 18:10
34 楼 woduha 2012-11-16 09:09
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
javascript 数组下线为0 ,所以length输出为2 0,1,2
照你这么说,如果是var array = new Array("no1");alert(array.length);就输入0了?开玩笑
数组只能用序号操作吧,估计要是写 array[2]="props1",length就是3了
33 楼 小山羊106 2012-09-07 09:46
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
javascript 数组下线为0 ,所以length输出为2 0,1,2
照你这么说,如果是var array = new Array("no1");alert(array.length);就输入0了?开玩笑
32 楼 vs880 2011-06-10 12:34
alert(array2.length); //3
这个在IE下输出的是3,在火狐下输出是2??????
IE9也输出2
31 楼 87029274 2011-04-13 09:15
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
这个数组是不是相当于有三个属性,相当于 var array={"0":"no1","1":"no2","po":"props1"},而数组的length只能把名字全是数字的属性数出来,故length是两个,而忽视了"po"属性!我是这样理解的!
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
是不是可以这样理解,数组的属性包含值,即属性名是数字的属性才是数组的值。这样数组值一定是数组的属性,属性不一定是数组的值。
其实po:props1这个应该用括号括起来的{po:props1}这样数组会把他当做一个元素 数组中没有length是属性不是方法的至于说数组中arry[0]和arry["0"]是相同的 我觉得不是 array[0]应该是指下表为0的
个人在IE下把各种情况都测试了一下,得出一下结论:
1.在javascript中数组是一种特殊的对象,数组中各项都是它的属性,只不过一部分属性名是0,1...等下标数字。所以array[0]和array["0"]相等的,都是取得下标为0的值,也就是属性名为0的值
2.length也是数组的属性(这个属性是系统自动统计添加的),所以array.length 和 array["length"]显示的都是数组的长度,但是有一点要注意,数组统计长度时统计的只是属性名为数字的的属性的个数。
所以var array = new Array("no1","no2");
array["po"] = "props1";
alert(array.length); //2 这个数组长度仍为2。
30 楼 wonka438 2011-03-05 14:59
29 楼 wonka438 2011-03-05 14:59
28 楼 wonka438 2011-03-05 14:33
27 楼 seagulls88 2010-10-17 20:12
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
javascript 数组下线为0 ,所以length输出为2 0,1,2
大哥,你别误导人家啊,length是你这样算的?
26 楼 ZHJason 2010-09-07 17:06
25 楼 JamesQian 2010-08-31 00:16
24 楼 JamesQian 2010-08-31 00:14
23 楼 cw1011 2010-06-11 11:12
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
这个数组是不是相当于有三个属性,相当于 var array={"0":"no1","1":"no2","po":"props1"},而数组的length只能把名字全是数字的属性数出来,故length是两个,而忽视了"po"属性!我是这样理解的!
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
是不是可以这样理解,数组的属性包含值,即属性名是数字的属性才是数组的值。这样数组值一定是数组的属性,属性不一定是数组的值。
其实po:props1这个应该用括号括起来的{po:props1}这样数组会把他当做一个元素 数组中没有length是属性不是方法的至于说数组中arry[0]和arry["0"]是相同的 我觉得不是 array[0]应该是指下表为0的
22 楼 zxinger 2010-04-22 12:42
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
这个数组是不是相当于有三个属性,相当于 var array={"0":"no1","1":"no2","po":"props1"},而数组的length只能把名字全是数字的属性数出来,故length是两个,而忽视了"po"属性!我是这样理解的!
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
是不是可以这样理解,数组的属性包含值,即属性名是数字的属性才是数组的值。这样数组值一定是数组的属性,属性不一定是数组的值。
21 楼 CalebIce 2010-01-25 17:27
对这句的理解果然还不是很明白。。
这句array["po"] = "props1";应该是声明了一个po属性,可以直接用array.po来调用。
20 楼 habzyhs 2009-12-14 09:37
对这句的理解果然还不是很明白。。
19 楼 winter8 2009-10-03 12:10
18 楼 winter8 2009-10-03 11:37
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
这个数组是不是相当于有三个属性,相当于 var array={"0":"no1","1":"no2","po":"props1"},而数组的length只能把名字全是数字的属性数出来,故length是两个,而忽视了"po"属性!我是这样理解的!
还有一个问题,四楼说length是一个方法,本人不敢苟同,方法应该后面加一个括号啊,即length(),
17 楼 moliu 2009-09-19 10:25
array2 = [,,]; //没有数值填入只有逗号,则对应索引处的元素为undefined alert(array2.length); //3 这个在IE下输出的是3,在火狐下输出是2??????
在谷歌下也是2
----这些死角旯旮,咱初学者就不要管它啦
16 楼 moliu 2009-09-19 10:16
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
数组也是对象,所以数组可以有自己的属性,但是属性和值不是一个概念,"no1"和"no2"都是数组的值,而array["po"]是给数组添加了一个属性,其长度当然就没变了。
----
15 楼 moliu 2009-09-19 10:14
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
----长见识啊!谢谢
14 楼 sdcyst 2009-08-10 17:37
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
arrray["10"]=11 同 array[10]=11的结果是一样的
13 楼 myali88 2009-06-05 17:08
这里array.length=2,po是array的属性,但是如果这样:
则array.length=11,添加是不再是array的属性。
12 楼 tanqu2008 2009-06-03 11:05
11 楼 tanqu2008 2009-06-03 11:05
array["po"] = "props1";
array["1"] = "no3";
alert(array.length);
alert(array["1"] + "_" + array[1] + "_" + array["po"]);
10 楼 JaHunter 2009-05-21 17:10
9 楼 suko 2009-05-21 10:44
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
数组也是对象,所以数组可以有自己的属性,但是属性和值不是一个概念,"no1"和"no2"都是数组的值,而array["po"]是给数组添加了一个属性,其长度当然就没变了。
8 楼 biaowen 2009-05-02 13:59
var array = new Array("no1","no2"); array["po"] = "props1"; alert(array.length); //2 应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。 不懂。。。。。
javascript 数组下线为0 ,所以length输出为2 0,1,2
7 楼 geke260 2009-04-26 01:17
array["po"] = "props1";
alert(array.length); //2
应该结果为3才对啊,不是在后面加了个成员po么。应该是3才对。
不懂。。。。。
6 楼 sunwenran 2009-04-01 15:21