首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

大家帮看看这是咋回事

2013-09-06 
大家帮看看这是怎么回事?script typetext/javascriptvar cityListnew Array()cityList[河北省][

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


<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’


//很显然无法转化,但是“5”可以转化为5。然后在0,1,3,5中在找到最大数字5,所以length=5+1=6。
//对于没有赋值的数字索引如c2[2]则默认被赋值undefined。至于c2['new']则是给数组添加了一个名为new
//的属性(用alert(c2.new)来检测),而并没有被列在数组元素之列。其实,你的例子可以理解为是给
//数组添加了三个分别名为河北,河南,湖北的属性,而数组元素一个也没有添加,但是因为属性名不能是
//汉字字符串所以你这三个属性其实添加的也没有意义,无法读取。
var c2=new Array();
c2[0]=['邯郸市','石家庄市'];
c2[1]=['郑州市','洛阳市'];
c2[3]=['武汉市','宜昌市'];
c2['5']=['x市','xx市'];
c2['new']=['y市','yy市'];
alert(c2.length);
alert(c2[2]);
alert(c2.new);


[解决办法]
你这种是 map 类型的写法。
[解决办法]

cityList = new Array();
cityList.push(cityList['河北省']);
cityList.push(cityList['河南省']);
cityList.push(cityList['湖北省']);
alert(cityList.length);//先把内容添加到cityList空数组中;下一步再给每个数组元素添加子数组,使数组变成二维数组
cityList[0] = ['邯郸市','石家庄'];
cityList[1] = ['郑州市','洛阳市'];
cityList[2] = ['湖北省','武汉市'];


[解决办法]
LZ的写法是MAP的写法,JS里数组是下标形式的

var arr = new Array();
arr.push(1);
arr.push(2);
// 可以通过以下循环读取数据
for(var i = 0; i < arr.length; i++) {
    alert(arr[i]);
}


MAP形式

var arr = new Array();
arr["a"] = "a";
arr["b"] = "aa";
// 通过以下循环方式读取
for(var key in arr) {
    alert(arr[key]);
}

热点排行
Bad Request.