js数组的误解
js数组实际是个残废货,没有关联数组这一说,要实现真正意义上的关联数组只能用对象,那你肯定不服气了,说怎么没有关联数组,我来给你写一个:
var arr = []; arr['a'] = 1; arr['b'] = 'ss';
好像有那么点关联数组的意思,但是。。。你输出一下arr.length看看吧,结果并非你所预料的2,而是0。其实也并没有什么好惊讶的,Js中一切源于对象,数组也从对象继承而来,当你用arr['a']=1来给数组添加元素的时候,实际上是在给数组对象添加属性,有点绕是么??那看一段代码:
var fn = function () {}; fn['a'] = 1; fn['a'] = 'ss';
你回发现原来函数也可以拿来当数组用啊,不只是数组和函数,只要是对象都可以,只不过是存储在对象上的属性而非严格意义的数组。归根到底,还是这段代码
var o = new Object(); o['a'] = 1; o['b'] = 'ss';
1、声明变量,
2、给变量添加属性
有点啰嗦了,再来个诡异点的:
var arr = []; arr[1] = 10; arr[100] = true; alert(arr.length);
骚年,凌乱了吧。。。你会发现length = 键名最大值+1
这段代码和上面一样
var arr = []; arr['1'] = 10; arr['100'] = true; alert(arr.length);
来段总结性的话:不要试图在js中使用关联数组,尤其不要试图用数值类型的键名。js中的关联数组用对象取代。