• 全部
  • 问答

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;
...全文
14 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lxx8402 2002-06-26
函数虽然是你写的,还是好像script5.6文档,说句实话,稍微了解jscript的通过msdn中的文档都可以写出来,没有什么了不起。
====================================================
付msdn例子:
function array_max( ){
var i, max = this[0];
for (i = 1; i < this.length; i++)
{
if (max < this[i])
max = this[i];
}
return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );
========================================
顺便让你看看我一年前写的jscript[有bug]
http://www.csdn.net/Develop/read_article.asp?id=11455
回复
希偌 2002-06-24
先结贴再收藏!
回复
possible_Y 2002-06-24
不错
回复
qiushuiwuhen 2002-06-24
鼓励捧场,随便帮你贴一下上一集的连接,下次自己贴了

http://www.csdn.net/Expert/TopicView1.asp?id=823702
回复
apple749769 2002-06-24
写的不错呀,我喜欢,感谢你!
回复
hax 2002-06-24
多谢大家捧场,小生会再接再厉。

不过谁能告诉我,如何把这些文章变成CSDN的专栏啊?hehe。
回复
whiteclude 2002-06-24
收藏嗒
回复
bencalie 2002-06-23
这些好像script5.6文档里都有噢
回复
hax 2002-06-23
MS的文档里面没有指出自己的bug吧?(废话,hehe)
而且还没有模拟实现的。这可是我自己写的。这些方法都是ECMAScript Edition 3的,IE 5以及之前版本都不支持,不过用了我的模拟实现就没问题了,而且我的模拟实现还纠正了MS的Bug,hehe。

用法陈述方面,我直接抄了5.6的文档,不过我可是跟ECMAScript的文档和Netscape 的 JavaScript 1.5 Reference 作了对照之后的。MS没说清楚的地方,以后的文章也许就用JS 1.5 Ref乃至ECMAScript的晦涩的说明文档乐。
回复
相关推荐
发帖
JavaScript
创建于2007-09-28

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2002-06-23 07:14
社区公告
暂无公告