JavaScript隐藏秘技 (2)
hax 2002-06-23 07:14:55 3. Array 的扩展方法
这一部分在JScript5中没有,但是新的实现了EMCAScript Edition 3的JScript 5.5中有的。根据MS的文档,IIS 5使用5.5,此外我验证了IE 6也使用该引擎。至于IE 5.5,那个仁兄试验一下好了。
push 方法 将新元素添加到一个数组中,并返回数组的新长度值。
arrayObj.push([item1 [item2 [. . . [itemN ]]]])
参数
arrayObj 必选项。一个 Array 对象。
item, item2,. . . itemN 可选项。该 Array 的新元素。
说明
push 方法将以新元素出现的顺序添加这些元素。如果参数之一为数组
,那么该数组将作为单个元素添加到数组中。
对于不支持该方法的,可以自己写一个模拟:
function MyPush()
{
for(i=0; i<arguments.length; i++)
this[this.length] = arguments[i];
return this.length;
}
Array.prototype.push = MyPush;
pop 方法 移除数组中的最后一个元素并返回该元素。
arrayObj.pop( )
必选的 arrayObj 引用是一个 Array 对象。
说明 如果该数组为空,那么将返回 undefined。
自己的模拟实现:
function MyPop()
{
if(this.length==0) return undefined;
v = this[this.length - 1];
this.length--;
return v;
}
Array.prototype.pop = MyPop;
unshift 方法 将指定的元素插入数组开始位置并返回该数组。
hax注:根据EMCAScript Edition 3(我辛辛苦苦查的文档),unshift
应该返回新的长度,显然微软的文档有误。而且根据我的试验,IE 6的
unshift返回undefined,也就是什么都没返回。这应该是MS的又一个bug。
也许他们很快会在下一个building中悄悄改正 :)
arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])
参数
arrayObj 必选项。一个 Array 对象。
item1, item2, ... ,itemN 可选项。将插入到该 Array 开始部分的元素。
说明
unshift 方法将这些元素插入到一个数组的开始部分,所以这些元素
将以参数序列中的次序出现在数组中。
模拟实现:
function MyUnshift()
{
for(i=this.length-1, j=this.length-1+arguments.length; i>=0; i--, j--)
if (i in this) this[j]=this[i];
else delete this[j];
for(i=0; i<arguments.length; i++)
this[i] = arguments[i];
return this.length;
}
Array.prototype.Unshift = MyUnshift;
shift 方法 移除数组中的第一个元素并返回该元素。
arrayObj.shift( )
必选的 arrayObj 引用是一个 Array 对象。
说明 shift 方法可移除数组中的第一个元素并返回该元素。
模拟实现:
function MyShift()
{
if (this.length==0) return undefined;
v = this[0];
for(i=1; i<this.length; i++)
if (i in this) this[i-1]=this[i];
else delete this[i-1];
this.length--;
return v;
}
Array.prototype.Shift = MyShift;