JS数组

来源:互联网 发布:阿里云服务器可以干嘛 编辑:程序博客网 时间:2024/06/06 02:04

一.数组的创建方法

1.1采用数组字面量

(数组字面量提供了一种非常方便地创建新数组的表示法。一个数组字面量是在一对方括号中包围0个或多个用逗号分隔的值的表达式。)

a.JS的数组是无类型的,里边可以存放任何类型的数据(表达式)。

 varaValues=["string", 24, true, null];


b.也可以包含对象直接量或其他数组直接量(eg)

var bValues=[[1,{x:1,y:2}],[2,{x:3,y:4}]];


c.当数组中省略某个值的时候,省略的元素为undefined

var undefs=[,,];

d.稀疏数组:包含从0开始的不连续索引的数组

在数组直接量中省略值时不会创建稀疏数组,省略的元素在数组中式存在的,值为undefined,和数组元素根本不存在是有差别的

var a1=[,,,];//数组时[undefined,undefined,undefined]

var a2=new Array(3);//该数组没有元素。当你给Array()构造函数传递一个简单的整数时,它不会成为数组的第一个元素的值,而被用来设置数组的长度;

这意味着new Array(3)会创建一个数组长度为3的数组,但没有实际的元素;

var a1=[,,,,];var a2=new Array(3);for(var i=0;i<a1.length;i++){alert(a1[i]);}//alert(a1[0]);<strong>alert(0 in a1);//此处应该显示true,但是返回FALSE,求解</strong>alert(0 in a2);var a3=[,]var a4=[undefined];alert(0 in a3);alert(0 in a4);alert(a3.length);

2.1对象的创建

a.用对象字面量,如:

var oCar = {   “color”:   “red”,   “doors”:   4,   “paidfor”:true}


这里创建了一个对象,内有三个属性,可用如“.”号的方式访问对象的属性:

alert(oCar.color);        //输出”red”alert(oCar.door);         //输出”4”alert(oCar.paidfor);      //输出”true”


也可用“[“属性”]”的方式得到属性值,如下:

alert(oCar[“color”]);      //输出字串”red”alert(oCar[“door”]);       //输出字串”4”alert(oCar[“paidfor”]);    //输出字串”true”


用对象字面量定义的数组不具有length属性。

 

3.1数组和对象的混合

    这里只能使用混合字面量,来创建“对象数组”或“包含数组的对象”。

var oCars =[{  “color”:   “red”,   “doors”:   2,   “paidfor”:true},{  “color”:   “blue”,   “doors”:   4,   “paidfor”:true},{  “color”:   “white”,   “doors”:   2,   “paidfor”:false}];


这就是一个对象数组,里面包含了三个对象,访问时形如这样:

alert(oCars[1].color);       //输出“blue”

二.数组长度

a.length属性值代表数组中元素的个数,值比数组中最大的索引大1

b.当数组时稀疏的时,length属性值大于元素的个数

c.设置length属性为一个小于当前长度的非负整数时,当前数组中那些索引值大于或等于n的元素将从中删除

d.将数组的length属性值设置为大于其当前的长度,在数组尾部创建一个空的区域

三.数组元素的添加和删除

a.push()方法在数组末尾增加一个或多个元素

a=[];

a.push("zero");

a.push("one","two");

 

push()在数组的尾部添加一个或多个元素,并返回数组新的长度

pop()删除数组的最后一个元素,减小数组长度并返回它删除的值

var stack=[];

stack.push(1,2); [1,2]  2

static.pop();[1] 2//删除的值

 

unshift()在数组头部添加一个或者多个元素,返回数组新的长度

shift()删除数组第一个元素并将值返回

 

 

 

删除:删除数组元素与为其赋undefined值是类似的,对一个数组元素使用delete不会修改数组的length,变成稀疏数组

我们可以删除对象的某个属性:

var o = { x: 1 };delete o.x; // truealert(delete x);alert(o.x); // undefined


 

但不能删除变量,比如以下面这种方式声明的:

//这种定义存在的问题

var q = 1;alert( delete q); // falsealert( q); // 1也不能删除函数,比如下面所定义的:function x(){}delete x;//false


当声明的变量和函数成为 Variable object 对象的properties ——可能是 Activation object 对象(对于 Function code 来说),或全局对象(对全局代码来说),这些 properties 创建时就被赋予了 DontDelete attribute属性.然而,任何显式(或隐式)对指定 property 属性的赋值所创建的 property 属性则没有DontDelete属性.这就是为什么我们可以删除某些 properties属性,而其他的不能删除的本质原因

DontDelete指的是: 在 property上的一个特殊attribute,用于控制是否可以删除此property.注意,一些内置对象的属性被指定为DontDelete,所以不能被删除.特殊的arguments变量(或者,正如我们刚刚介绍的, Activation 对象的属性等) 拥有 DontDelete 标志.所有 function实例的length 属性(形参个数)也具有 DontDelete 标志

(function(){   /* 不能删除 `arguments`,因为其拥有 DontDelete */   delete arguments; // false   typeof arguments; // "object"    /* 不能删除 function 的 `length`; it also has DontDelete */   function f(){}   delete f.length; // false   typeof f.length; // "number" })();


 

splice()方法

能够从数组中删除元素,插入元素到数组中或者同时完成这两种操作

4个参数,前两个参数指定需要删除的数组元素。第一个参数指定了插入或删除的起始位置,第二个参数指定删除的个数,若省略则删除从起点开始到结尾的所有元素,返回由删除元素组成的数组,若没有删除元素则返回空数组。

 

var a=[1,2,3,4,5,6,7,8];a.splice(4);a.splice(1,2);


后两个参数指定需要插入到数组中的元素,从第一个参数指定的位置开始插入

var a=[1,2,3,4,5]alert(a.splice(2,0,'a','b'));alert(a);alert(a.splice(2,2,[1,2],3));//插入数组本身而不是数组元素alert(a);

四.遍历数组

遍历稀疏数组的方式

a.跳过null,undefined和不存在的元素

for(var i=0;i<a.length;i++){         if(!a[i])continue;}


 

b.只跳过undefined和不存在的元素

for(var i=0;i<a.length;i++){if(a[i]===undefined)continue;}


 

c.只跳过不存在的元素仍要处理存在的undefined元素

for(var i=0;i<a.length;i++){if(!(i in a)) continue;}

五.多维数组

数组里面可以包含对象,所以可以把数组里面的某个元素再声明为数组,例如

var a = new Array();

a[0] = new Array();

a[0][0] = 1;

alert(a[0][0]);  //弹出 1

 

声明的时候赋值

var a = new Array([1,2,3], [4,5,6], [7,8,9]);

var b = [[1,2,3], [4,5,6], [7,8,9]];

 







0 0
原创粉丝点击