看array
作者:yaya | 时间:2009年12月30日 | 分类 学海无涯 | 标签 array | 0回复
还久没写“学海无涯”类的了,写写。
在javascript里面,array是很有意思的东东。它代表数组,可不单单是数组。
数组array可以简单的用作array[0] array[1],同时,也可以有像操作对象object={ }一样的方便。
先来看看方括号到底做了什么。
我们可以这样来理解假设执行方法:
比如写上
Object.prototype.toString = function(){return 99;}
a[{}]=1;
alert(a.length); //100
可以看出array[ v ],这里的一对方括号将调用v 的toString()方法。更进一步,看
String.prototype.toString =function(){return 999;};
var z = new String("800");
a[z]=2;
alert(a.length);//1000
以及
String.prototype.toString =function(){return 999;};
var z = “800”
a[z]=2;
alert(a.length);//801
以及其他测试,可以看出,其中的几步(非实际顺序)将判断参数类型,如果为number则直接赋值,而若不是,则用instanceof 方法判断类型,如果typeof为string而instanceof不是String,则用正则来判断是否为十进制的非负整数。(这里为什么不用Number()去转换,然后再判断是否为NaN更好,这样就可以自动转换像"0x123"这样的数了)。如果是,则赋值,若不是,则调用其toString(10)的方法转换再重复这个判断,然后再执行到这一步则是添加属性到对象了。
所以,我们可以用array["abc"]=1这样的形式来写。而array本来也就是个object,只是它有数组的许多属性,如果你想把一个对象写成自己的myarray写是可以的,当然是在不考虑效率的情况下。这样一来,array就和object用法可以一样了,唯一区别在于语法上,array不能像object一样写成object={a:1,b:2},而是要分开写成array.a=1 array.b=2 或者 array[a]=1,array["b"]=2(object 也可以这么写)。再看for in操作,array和object是完全一样的,不用多说了。而array.length的for操作,相当于就是取得array所有属性里面为非负整数的属性。而delete操作在array和object里也是一样的。
而操作时间上,array和object也是基本相同的。

已有0条回复