定义数组
方法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