关于js中关联数组的使用问题
2011-05-09 14:16
417 查看
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(); 的方式!
相关文章推荐
- 关于使用 node.js 搭建服务遇到的跨域问题
- java使用js引擎时,关于时间的问题getTime()获取为NAN的问题
- 关于js页面之间跨域传值问题 opener parent等等 使用window.returnValue
- 关于spring mvc拦截器拦截js文件等导致无法正常使用问题的解决
- 关于使用bootstrap中modal和ajaxupload.js图片问题
- 关于android的webview 使用的问题 JS无法正常使用 界面切换出现白屏
- 关于使用JS动态修改CSS样式问题
- 关于JSValidation框架使用出现的问题
- 关于spring mvc拦截器拦截js文件等导致无法正常使用问题的解决
- 关于spring mvc拦截器拦截js文件等导致无法正常使用问题的解决
- 关于js中获得某一天的昨天以及上周一天的日期使用问题
- 关于在js中使用csstext的问题
- 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案
- node.js中关于使用formidable模块实现文件上传至指定目录的问题
- 关于使用struts2与jsp时,使用prototype.js的$属性与jquery的$冲突问题
- 关于解决JavaScript中使用require引用外部js时出现的某个对象 not defined 时现时消失 问题
- 关于使用js的setAttribute和getAttribute取dom属性在ie ff safri下的问题
- 关于使用js算总价的问题