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;
...全文
53 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
收藏嗒
希默软件 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的晦涩的说明文档乐。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧