javascript权威指南-核心参考手册 阅读笔记_1_Argument&Array

1.Arguments

    1.1.Arguments对象只在函数体中定义,

    1.2.length属性,

    该属性声明的是实际传递给函数的参数个数(只读),而不是期望传递的参数个数。但它没有Array.length属性的专有行为(Array.length,可读可写,通过该属性可以更改数组的大小)

    1.3.callee属性

    属性arguments.callee引用当前正在运行的函数,它给未命名的函数提供了一个自我引用的方式。该属性只在函数体内被定义

 

    //一个未命名的函数直接量使用callee属性引用它自身
    //以便它能够递归
    var factorial=function(x){
        if(x<2) return 1;
        else return x*arguments.callee(x-1);
    }
    var y=factorial(5);    //返回120

    //用于验证参数
    function calleeLengthDemo( arg1, arg2 ) {
        if ( arguments.length == arguments.callee.length ) {
            window.alert( '验证形参和实参长度正确!' );
            return;
        } else {
            alert( '实参长度:' + arguments.length );
            alert( '形参长度:' + arguments.callee.length );
        }
    }

 

2.Array
    2.1构造函数
    new Array();
    new Array(size);
    new Array(element0,element1,…,elementn)
      
    返回值
    新创建并被初始化了的数组。如调用Array()时无参数,那么返回的数组为空,length域为0.
      
    2.2 属性
    length
    一个可读可写的整数,声明了数组中的元素个数。如果数组中的元素不连续,它就是比数组中的最后一个元素的下标大1的整数。改变这个属性的值将截断或扩展数组。
      
    2.3方法
    2.3.1 Array.contact(value,…)
    返回值
    一个新数组,是把指定的所有参数添加到array中构成的。
    该方法将创建并返回一个新数组,它并不修改array.如果要进行concat()操作的参数是一个数组,那么添加的是数组中的元素,而不是数组。

   //例子
    var a=[1,2,3];
    a.contact(4,5);        //返回[1,2,3,4,5]
    a.contact([4,5]);    //返回[1,2,3,4,5]
    a.contact([4,5],[6,7]);    //返回[1,2,3,4,5,6,7]
    a.contact(4,[5,[6,7]]);    //返回[1,2,3,4,5,[6,7]]

   2.3.2 Array.join()

    摘要

    array.join()

    array.join(separator)

    参数

    separator

        在返回的字符串中用于分隔数组元素的字符或字符串,它是可选的。如果省略了这个参数,用逗号作为分隔符。

    返回值

    一个字符串,通过把array的每个元素转换成字符串,然后把这些字符串连接起来,在两个元素之间插入指定的deparator字符串。

    2.3.3 Array.pop()

    删除并返回数组的最后一个元素

    描述

    方法pop()将删除array的最后一个元素,把数组长度减1,并返回它删除元素的值。如果数组已经为空,则pop()不改变数组,返回undefined.

   例子

方法pop()和方法push()可以提供先进后出(FILO)栈的功能。例如:

        var stack=[];        //栈:[]
        stack.push(1,2);    //栈:[1,2]        返回值为2
        stack.pop();        //栈:[1]        返回值为2
        stack.push([4,5]);    //栈:[1,[4,5]]    返回值为[4,5]
        stack.pop();        //栈:[1]        返回值为[4,5]
        stack.pop();        //栈:[]            返回值为1

 

    2.3.4 Array.push()

    给数组添加元素

    摘要

    array.push(value,…)

    参数

    value,….

        要添加到array尾部的值,可以是一个或多个。

    返回值

    把指定的值添加到数组后的新长度

 

    描述

    方法push()将把它的参数顺次添加到array的尾部。它直接修改array,而不是创建一个新的数组。方法push()和方法pop()用数组提供先进后出栈的功能。参阅"Array.pop()"中示例

    bug

    在JavaScript的Netscape实现中,如果把语言版本明确地设为1.2,该函数将返回最后添加的值,而不是返回新数组的长度

 

     2.3.5 Array.reverse()

    颠倒数组中的元素顺序

    描述

    Array对象的方法reverse()将颠倒数组中元素的顺序。它在原数组上实现这已操作。即重排指定的array的元素,但并不创建新数组。如果对array有多个引用,那么通过所有引用都可以看到数组元素的新顺序。

例子

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

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

 

    2.3.6 Array.shift()

    将第一个元素移出数组

    返回值

    数组原来的第一个元素

    描述

    方法shift()将把array的第一个元素移出数组,返回那个元素的值,并且将余下的所有元素前移一位,以填补数组头部的空缺。如果数组是空的,shift()将不进行任何操作,返回undefined.注意,该方法不创建新数组,而是直接修改原有的数组。

   

    方法shift()和方法Array.pop()相似,只不过它在数组头部操作,而不是在尾部操作。该方法常常和unshift()一起使用。

例子

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

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

    a.shift();    //返回值 [2,3]; a=[4]

 

    2.3.7 Array.slice()

    返回数组的一部分

    摘要

    array.slice(start, end)

    参数

    start

        数组片段开始出的数组下标。如果是负数,它声明从数组尾部开始算起的位置。也就是说,-1指最后一个元素,-2指倒数第二个元素,以此类推。

    end

        数组片段结束处的后一个元素的数组下标。如果没有指定这个参数,切分的数组包含从start开始到数组结束的所有元素。如果这个参数是负数,它声明的是从数组尾部开始算起的元素。

    返回值

    一个新数组,包含从startend(不包含该元素)指定的array元素。

    描述

    方法slice()将返回数组的一部分,或者说是一个子数组。返回的数组包含从start开始到end之间的所有元素,但是不包括end所指的元素。如果没有指定end,返回的数组包含从start开始到原数组结尾的所有元素。

    注意:

    该方法并不修改数组。如果想删除数组中的一段元素,应该使用方法Array.splice().

 

例子

    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],由于IE4中的bug,所以返回值为[1,2,3]

 

    bug

    在IE4中,参数start不能为负数。

 

    2.3.8 Array.sort()

    对数组元素排序

    摘要

    array.sort();

    array.sort(orderfunc)

    参数

    orderfunc

        用来指定按什么顺序进行排序的函数,可选。

    返回值

    对数组的引用。注意,数组在原数组上进行排序,不制作副本。

    描述

    方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本。不传递参数默认按字母顺序(更为精确地说,是按照字符编码的顺序)对数组中的元素进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如果有必要的话),以便进行比较

   

    如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数a和b,其返回值如下:

。如果根据你的评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小于0的值。

。如果a等于b,就返回0

。如果a大于b,就返回一个大于0的值。

    注意,数组中undefined的元素都排列在数组末尾。即使你提供了自定义的排序函数,也是这样。因为undefined值不回被产地给你提供的orderfunc。

    例子

    下面的代码暂时了如何编写按数字顺序,而不是按字母顺序对数组进行排序的比较函数:

    //按照数字顺序排序的排序函数

    function numberorder(a,b){return a-b;}

    a=new Array(33,4,1111,222);

    a.sort();            //按照字母顺序的排序结果为:1111,222,33,4

    a.sort(numberorder);//按照数字排序的记过为:4,33,222,1111

 

    2.3.9 Array.splice()

    插入、删除或替换数组的元素

    摘要

    array.splice(start,deleteCount,value,…)

    参数

    start

        开始插入(或删除)的数组元素的下标

    deleteCount

        从start开始,包括start所指的元素在内要删除的元素个数。这个参数是可选的,如果没有指定它,splice()将删除从start开始到元数组结尾的所有元素。如果不删除,该参数为0

    value,…

    要插入数组的0个或多个值,从start所指的下标处开始插入。

    返回值

    如果从array中删除了元素,返回的是含有被删除的元素的数组,但是要注意,由于存在一个bug,因此在javascript1.2的netscape实现中,返回的并不总是数组。

    描述

   方法splice()将删除从start开始(包括start所指的元素在内)的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。位于插入或删除的元素之后的数组元素都会被移动,已保持他们与数组其它元素的连续性。注意,虽然splice()方法与slice()方法名字相似,但作用不同,方法splice()直接修改数组。

    例子

    读了下面的例子,就很容易理解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],但Netscape/javascript 1.2返回4

    a.splice(1,0,2,3);//返回[],但Netscape/javaScript1.2则返回undefined

 

    Bug

    方法splice()假定在各种情况下均返回一个包含已删除元素的数组。但是,在Netscape的JavaScript1.2解释器中,如果删除的是单个元素,那么该方法返回的是元素,而不是包含那个元素的数组。如果没有删除任何元素,它不是返回一个空数组,而是什么都不返回。只要把语言版本明确地设置为1.2,javascript的Netscape实现都有这种bug行为

 

    2.3.10 Array.toLocalString()

    把数组转换成局部字符串,覆盖object.toLocalString()

    返回值

    数组array的局部字符串表示

   抛出

    TypeError

        调用该方法时,若对象不是Array,则抛出该异常

    描述

    数组的方法toLocalString()将返回数组的局部字符串表示,它首先调用每个数组元素的toLocalString()方法,然后地区特定的分隔符把生成的字符串链接起来。形成一个字符串

 

    2.3.11 Array.toString()

    将数组转换成一个字符串,覆盖Object.toString()

    返回值

    array的字符串表示

    抛出

    TypeError

        调用该方法时,若对象不是Array,则抛出该异常

    描述

    当数组用于字符串环境中时,JavaScript会调用这已方法将数组自动转换成一个字符串。但在某些情况下,需要明确地调用这个方法。

    toString()在把数组转换成字符串时,首先要将数组的每个元素都转换成字符串(通过调用这些元素的toString()方法)。当每个元素都被转换成字符串时,它就以列表的形式输出这些字符串,字符串之间用逗号分隔。返回值与没有参数的join()方法返回的字符串相同。

    Bug

    在Netscape实现中,版本1.2,toString()将会返回用逗号和空格分隔的数组元素列表,这个列表采用数组直接量表示法,用方括号括起元素。

 

    2.3.12 Array.unshift()

    在数组头部插入元素

    摘要

    array.unshift(value,…)

    参数

    value,…

        要插入数组头部的一个或多个值

    返回值

    数组的新长度

    描述

    方法unshift()将把它的参数插入array的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组新的元素0,如果还有第二个参数,它将成为新的元素1,以此类推。注意,unshift()不创建新数组,而是直接修改原来的数组。

    例子

    方法unshift()通常和方法shift()一起使用。例如:

    var a=[];

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

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

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

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

posted on 2012-02-16 14:57  清雅阁  阅读(233)  评论(0编辑  收藏  举报

导航