锁定老帖子 主题:javascript面向对象技术基础(二)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-06
最后修改:2009-01-12
数组 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等等,在这就不再一一举例. 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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-26
最后修改:2008-12-26
alert(array2.length); //3
在firefox中执行结果是2: 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 这个例子太帅了(和我一样!O(∩_∩)O哈哈~): 我把 array["po"]换成array["2"]或者array[2],还有array.po换成array.“2”和array.2,发现了好多的秘密。对数组是特殊的对象有了更进一步的理解。猛赞 |
|
返回顶楼 | |
发表时间:2008-12-26
佩服楼上的仔细,的确结果是2
|
|
返回顶楼 | |
发表时间:2008-12-26
风雪涟漪 写道 佩服楼上的仔细,的确结果是2 用JavaScript打游击太多了,需要好好接受点系统的学习,所以就多动手 |
|
返回顶楼 | |
发表时间:2008-12-26
typeof array //Object
本身就是对象。Array就当对象来处理就好了 |
|
返回顶楼 | |
发表时间:2008-12-26
hite 写道 alert(array2.length); 在firefox中执行结果是2: 谢谢提醒,确实是2,在ie中是3 这个地方我还真没测试. 不过这个地方怎么解释呢? |
|
返回顶楼 | |
发表时间:2008-12-26
因为 firefox 忽略逗号后面为空的情况了。。。如 a=[1,2,] 在firefox 只有2个 ie里认为还有第三个元素是undefined.
浏览器差异把。一个逗号。。。。呵呵 |
|
返回顶楼 | |
发表时间:2008-12-30
最后修改:2008-12-30
var array = new Array("no1","no2");
alert(array.length);//2 array["po"] = "props1"; alert(array.length); //2 //对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此) alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 我和sdcyst 测试的结果不一样,在ie7下增加完也是2啊。 不好意思,我看错了,你测试的例子和我的不一样,你是说第一个例子,抱歉 |
|
返回顶楼 | |
发表时间:2008-12-30
hanjs 写道 var array = new Array("no1","no2");
alert(array.length);//2 array["po"] = "props1"; alert(array.length); //2 //对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此) alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 我和sdcyst 测试的结果不一样,在ie7下增加完也是2啊。 还有,ls的说的不是很正确吧。就拿这个例子说,新增加的节点有值,不是undefined,你又怎么说呢? 能不能说的清楚点? |
|
返回顶楼 | |
发表时间:2008-12-30
最后修改:2008-12-30
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 这段代码有疑问啊,为何length没有增加呢?我是这样看的。 其内部的length属性增加的时候,判断了标注,默认就是取length+1,可以上面赋值的时候制定了po,因为不是number类型,导致length没有进行加1处理。因为typeof array是object,因此只能通过 array.po访问这样添加的值. lz,你写的这个第一篇帖子呢 javascript面向对象技术基础(一) ?我翻了好多页也没有看到,能否提供下?谢谢 |
|
返回顶楼 | |