JavaScript—Array的方法以及函数直接量

学习笔记,非原创。

数组

数组是用构造函数来创建的。

 

数组的方法

>join()方法

把数组里的所有元素都转换成字符串,然后再把它们连接起来,可以指定一个可选的字符串来分割结果字符串中的元素。,如果没有指定分割字符串,那么就可以使用逗号分割。

Var a =[1,2,3];

Var s = a.join(); //s=”1,2,3”

S=a.join(“.”);//s=”1.2.3”

 

>reverse()方法

将颠倒数组的元素的顺序并返回颠倒后的数组。它在原数组上执行这一操作,并不是创建一个重排了元素的新数组,而是在已经存在的数组中对数组元素进行重排。

 

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

a.reverse();   //a[0]=3, a[1]=2, a[2]=0

var s = a.join(); //s=”3,2,1”

 

>sort()方法

是在原数组上对数组元素进行排序,返回排序后的数组。如果没有传递参数,就是按照字母顺序就行排序。如果数组有未定义的元素,则放在数组尾。

var a = new Array(“banana”, “cherry”, “apple”);

a.sort();

var s = a.join(“, ”); //s=”apple, banana, cherry”

 

如果要将数组按照别的顺序来排序,必须将一个比较函数作为参数传递给sort()。

 

>concat()方法

创建并返回一个数组,这个数组包含原始数组,其后跟随的concat的参数。

var a = [1,2,3];

a.concat(4,5);  //返回[1,2,3,4,5]

a.concat([4,5]);   // [1,2,3,4,5]

a.concat([4,5],[6,7]);   //[1,2,3,4,5,6,7]

a.concat(4,[5,[6,7]]);  //[1,2,3,4,5,[6,7]]

 

>slice()方法

返回一个数组片段,或者说是子数组。

返回由第一个参数开始到第二个参数为止的元素,但不包含第二个参数所指定的元素。

如果只有一个参数,则是从这个参数位置开始到结束处。

如果有一个是负数,则是指相对于数组中最后一个元素而言的元素。-1是指最后一个元素,-3是倒数第三个元素。

var a =[1,2,3,4,5];

a.slice(0,3);  //[1,2,3]

a.slice(3);   //[4,5]

a.slice(1,-1);   //[2,3,4]

a.slice(-3,-2);   //[3]

 

splice()方法

插入或者删除数组元素。在原数组上修改数组,并不创建新数组。

第一个参数指定了要插入或者删除的元素在数组中的位置。第二个参数指定了要删除的元素个数。如果第二个参数省略了,那么将删除从开始元素到数组结尾的所有元素。返回的是删除了的元素数组。

 

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

a.splice(4);  //返回[5,6,7,8];a是[1,2,3,4]

a.splice(1,2);  //返回[2,3];a是[1,4]

a.splice(1,1);  //返回[4]; a是[1]

 

splice的前两个参数指定了应该删除的数组元素,这两个参数指数还可以任意个参数,它们指定的是要从第一个参数指定的位置处开始插入的元素。

var a = [1,2,3,4,5];

a.splice(2,0,’a’,’b’);  //返回[], a=[1,2,’a’,’b’,3,4,5]

b.splice(2,2,[1,2],3);  //返回[‘a’,’b’];a是[1,2,[1,2],3,3,4,5]

 

 

push()和pop()方法

push()和pop()方法使我们可以像使用栈那样来使用数组。push()可以将一个或多个新元素附件到数组的尾部,然后返回数组的新长度。

pop()相反,它将删除数组的最后一个元素,减少数组长度,但是返回删除的值。

var stack=[];

stack.push(1,2);//stack=[1,2];返回 2

stack.pop();//stack=[1],返回2

stack.push(3); //stack=[1,3];返回2

stack.pop();//stack=[1],返回3

 

unshift()和shift()方法

和push()和pop()相似,但是是在数组的头部进行元素的插入和删除。

unshift()会将一个或多个元素添加到数组的头部,然后把已有的元素移动到下标较大的位置以腾出空间,返回的数组的新长度。方法shift()会删除并返回数组的第一个元素,然后将后面元素前移。

var a =[];

a.unshift(1);//a=[1],返回1

a.unshift(22); //a=[22,1];返回2

a.shift();//a=[1];返回22

a.unshift(3,[4,5]); //a=[3,[4,5],1];返回3

a.shift();//a=[[4,5],1];返回3

a.shift();//a=[1];返回[4,5];

a.shift();//a=[];返回1

 

toString()方法

将数组的每个元素都转换成一个字符串,然后输出这些字符串的列表,字符串之间用逗号隔开。

 

toSource()方法

toSource() 方法表示对象的源代码。

function employee(name,job,born)

{

 this.name=name;

 this.job=job;

 this.born=born;

}

var bill=new employee("Bill Gates","Engineer",1985);

var s= bill.toSource(); //s=({name:"Bill Gates", job:"Engineer", born:1985})

 

 

 

函数定义方法

函数定义有3中方式

function语句,Function()构造函数,函数直接量。

function f(x){return x*x;}  // function语句

var f = new Function(“x”, “return x*x”);    // Function()构造函数

var f = function(x){return x*x;};   //函数直接量

 

函数直接量是一个表达式,它可以定义匿名函数。虽然函数直接量创建的是未命名函数,但是它的语法也规定它可以指定函数名,这在编写调用自身的递归函数时非常有用。

给函数直接量命名,并不是真正创建一个函数,而是使用命名的引用。

var f = function fact(x){if(x<=1)  return1; else return x*fact(x-1);};

上面的代码定义了一个未命名函数,并把对它的引用存储在变量f中。它并没有真正创建一个名为fact()的函数,只是允许函数体用这个名字来引用自身。

 

构造函数和函数直接量的区别:

  1. 构造函数允许在运行时动态地创建和编译Javascript代码。函数直接量是一个静态部分。
  2. 每次使用构造函数都会解析函数体并且创建一个新的函数对象。如果对构造函数的调用出现在一个循环中,或者经常被调用的函数中,效率就非常低。

函数直接量出现在循环中或者多次调用的时候,不是每次都被重新编译,而且每次遇到一个函数直接量时也不创建一个新的函数对象。

  1. 构造函数创建的函数不使用此法作用域。总是被当作顶级函数来编译。
posted on 2014-06-10 16:38  alicewang999  阅读(232)  评论(0编辑  收藏  举报