日期:2014-05-16  浏览次数:20470 次

大家帮看看这是怎么回事?

<script type="text/javascript">
var cityList=new Array();
cityList['河北省']=['邯郸市','石家庄市'];
cityList['河南省']=['郑州市','洛阳市'];
cityList['湖北省']=['武汉市','宜昌市'];
alert(cityList.length);
</script>

为什么数组的长度显示的是0,而不是3呢?

------解决方案--------------------
哪能那样识别呀?

<script type="text/javascript">
var cityList=new Array();
cityList[0]=['邯郸市','石家庄市'];
cityList[1]=['郑州市','洛阳市'];
cityList[2]=['武汉市','宜昌市'];
alert(cityList.length);
</script>
</head>

------解决方案--------------------
cityList[0]=xxx,cityList[1]=xxx 这样写 才是数组元素,不是数字的算是属性
------解决方案--------------------
数组的长度是你输入的最大下标(数字)+1决定的   
你那种关联数组是获得不到的
------解决方案--------------------
或者cityList.push
------解决方案--------------------
cityList['河北省'] 是给 cityList动态添加了 '河北省' 这个属性。

不是数组元素。
添加数组元素用 push.


如果要用属性,在加一个 len 属性就可以。遍历时,用 for in
<script type="text/javascript">
var cityList={};
cityList['河北省']=['邯郸市','石家庄市'];
cityList['河南省']=['郑州市','洛阳市'];
cityList['湖北省']=['武汉市','宜昌市'];
cityList.len=3;
alert(cityList.len);
</script>
------解决方案--------------------
(1)数组长度=最大数字索引+1,如果没有数组索引则长度为0。
具体到到你的例子,cityList数组的三个元素的索引都是纯字符串而非数字,所以cityList长度为0。

(2)但是对于js中的数组来讲,有一点需要注意,即:最大数字索引是指在索引中所能找到的最大数字或者数字字符串。如:

//这种情况是最大数字,length=最大数字索引(2)+ 1=3
var c0=new Array();
c0[0]=['邯郸市','石家庄市'];
c0[1]=['郑州市','洛阳市'];
c0[2]=['武汉市','宜昌市'];
alert(c0.length);

//下面这种情况就属于最大数字字符串:数组在寻找最大数字索引的时候会先把所有非数字索引先尝试着转
//化为数字,然后再找最大索引。c1中对于非数字索引即字符串索引‘2’转换为数字之后是2,然后数组
//在0,1,2中找到最大数字索引为2,索引length=2+1=3。
var c1=new Array();
c1[0]=['邯郸市','石家庄市'];
c1[1]=['郑州市','洛阳市'];
c1['2']=['武汉市','宜昌市'];
alert(c1.length);

//下面属于混合的情况,但是长度的计算方法一样,先把非数字索引“new”和“5”转化为数字,‘new’