js数组进阶

定义数组

方法1:

var a = new Array("1","2");
a[2] = 1;
a[3] = 2;

方法2:

var a = [1,2,3];
a[3] = 4;
var b = ["1", "2", "3", "4"];
***length属性非只读,当b.length=2时,遍历b时,只显示1,2,后面属性变得不可用;

字符串也可以作为数组的下标:

var stack = new Array();  
stack['first'] = 3.1415926;  
stack['second'] = "okay then.";
for(var item in stack){  
    alert(typeof stack[item]);  
    //number
    //string
    typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."
}
********
遍历数组:
1.//索引数组且并非"连续分配"内存的,因此索引方法并不会带来很高的效率

for (var i = 0,a; a=arr[i++];){alert(a);}

2.//可遍历对象的属性

for(var i in arr){alert(a);}
********
内置方法:
push():向数组的末尾添加一个或更多元素,并返回新的长度
pop():删除并返回数组的最后一个元素
splice():删除元素,并向数组添加新元素
sort(function(a,b){return a-b//正序})**数字排序时使用,字符排序时,直接arr.sort()
reverse():颠倒数组中元素的顺序
concat(array1 [,..arrayn]):用于将N个数组合并到array1数组中
slice(start, [end]):返回一个 Array 对象
delete只能删除元素对象,undefined将代替元素对象占据下标,因此,length不会减少
******************增加remove方法
//根据index删除
Array.prototype.remove = function(index)
{
	if(isNaN(index)||index>this.length){return false;}
	for(var i=0,n=0;i<this.length;i++)
	{
		if(this[i]!=this[index])
		{
			this[n++]=this[i];
		}
	}
	this.length-=1;
};
******************增加pushIndex方法
//根据index,插入

Array.prototype.pushIndex = function(index,d)
{
	var size = this.length;
	if(isNaN(index)||index>this.length){return false;}
	for(var j=size;j>=index;j--){
		this[j] = this[j-1];
    }
    this[index] = d;
    size++;
};
---不影响整个原型链

Array.remove = function(array, from, to) {  
    var rest = array.slice((to || from) + 1 || array.length);  
    array.length = from < 0 ? array.length + from : from;  
    return array.push.apply(array, rest);  
};
代价是你需要显式的传递需要操作的数组作为第一个参数
var array = ["one", "two", "three", "four", "five", "six"];
Array.remove(array, 0, 2);//删除0, 1, 2三个元素
****这种方式,相当于给JavaScript内置的Array添加了一个静态方法,静态变量同上,不需要"实例化"Array类

**********************************************************************

伪数组:符合以下条件的对象
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
如:
1,function内的arguments.
2,通过document.forms,Form.elements,Select.options,document.getElementsByName(),document.getElementsByTagName(),childNodes/children 等方式获取的集合(HTMLCollection,NodeList)等.

工具函数makeArray

function makeArray(obj){  
    var rs=[],len=obj.length;  
    try{  
	//slice(start,end)复制一段数组
        rs = [].slice.call(obj,0);  
    }catch(e){//for IE  
        for(var i=0;j=obj[i++];){  
            rs.push(j);  
        }                     
    }  
    return rs;    
} 

判断数组类型

//typeof是一个一元的操作符
1.alert(typeof []);//object //对数组无效
2.var arr=[]; alert(arr instanceof Array);//true
3.alert(arr.constructor == Array); // true


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值