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

关于js中关联数组的使用问题

两个例子
function test1() {
var array1 = { "A":"a","B":"b","C":"c" };
for (key in array1) {  // 能够正常输出数组
       alert('=1=1=====' + key);
       alert('=1=2=====' + array1[key]);
    }
}
function test2() {
var array2 = new Array();
        array2["A"] = "a";
        array2["B"] = "b";
array2["C"] = "c";
        for (key in array2) {   // 在输出正确数组前,会先输出许多函数信息
         alert('==1=====' + key);
         alert('==2=====' + array2[key]);
    }
}

在test1中直接定义数组能够正常输出;而在test2中用Array 定义数组则会输出很多函数信息

后来发现:
第一个例子并不是数组而是创建了一个对象(javascript 里  {}不能称作数组,应该属于object类型 ),
循环输出的是这个对象的属性和值;

第二个例子是数组但是你把他当成一个对象来使用的
array2["A"]="a"其实就是array2.A="a";
而new Array 出来的是Array类型。
因为在数组的方括号里面只能填数字,所以它只是给array2添加了3个属性
分别是
array2.A="a"
array2.B="b"
array2.C="c"
虽然javascript 中任何类型都是object,但是Array 的实例中已经带有很多和array相关的实例方法。
例如 indexOf/slice/。。。。

而且循环都是用in来循环的,in的循环回输出这个对象的所有自定义属性
因此,才会发生test2中输出函数信息的情况。。。

鉴于这种情况,在定义时应尽量使用
var array2 = {};或var array2 = new Object();  的方式!