Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
您的搜索结果

    Array

    概要

    在JavaScript中,数组以 Array 为构造函数,是一个高阶的类似有序列表的数据类型。

    语法

    
    [element0, element1, ..., elementN]
    new Array(element0, element1[, ...[, elementN]])
    new Array(arrayLength)
    
    
    元素列 —— elementN
    Array 构造函数传递以 ”,“ 分号分割的一组数据(即元素列)时,将返回一个以这些数据为数组元素的数组对象(当元素列仅有一个数据且为数值时除外,这是接下来要说的内容)。数据的个数为元素个数,即数组长度。
    数组长度 —— arrayLength
    Array 构造函数传递一个在 0 到 232-1 之间的整数,将返回一个以此为长度的数组对象。通过length属性可以访问这个值。如果传入的参数不是有效的数值,则抛出RangeError异常。如果传入的参数不是数值,则创建一个长度为1的数组,传入的参数即为数组的第一个元素。

    字面量表示法:

    还可以用一对[ ]创建数组(注意下面的[ ]和上面的[ ]的不同,上面每一对中括号的意思是:括号括住的内容是可选的。不要与下面混淆。),即数组字面量。

    [element0, element1, ..., elementN]
    

    描述

    一个数组是使用数字作为索引、一个名字为其名称的数值集合。注意当如下情况,shouldn't use it as an associative array,请使用对象

    下面的例子描述了如何使用值列表方式创建一个数组(Array)对象,其中tea数组包含了三个元素,并且其长度为3:

    tea = ["绿茶", "红茶", "乌龙茶"];
    

    You can construct a dense array of two or more elements starting with index 0 if you define initial values for all elements. A dense array is one in which each element has a value. The following code creates a dense array with three elements:

    myArray = new Array("你好", myVar, 3.14159);
    

    索引一个数组

    你索引一个数组使用它自有的顺序。 例如, 假设你定义一个如下数组:

    myArray = new Array("风", "雨", "火");
    

    你可以用如下的方式来引用数组:

    • myArray[0] 是第一个元素
    • myArray[1] 是第二个元素
    • myArray[2] 是第三个元素

    指定参数

    Array 构造器中如果仅仅指定了一个数字作为参数, 那么这个参数将作为数组的初始长度。下面的这个例子创建了一个包含有五个元素的数组:

    billingMethod = new Array(5);
    

    参数是否是一个简单的数字决定了Array 构造器的行为。

    • 如果参数就是一个数字,构造器会将数字转换成32bit无符号的整数,然后构造一个长度为该整数的数组,这时候数组的length属性值即为该整数,尽管数组还没有被赋值。
    • 如果这个参数不是一个数字,那么构造器会创建一个长度为一的数组,数组的第一个元素的值就是该参数值。

    下面的例子构造了一个长度为25的数组,并且给前三个元素赋值:

    musicTypes = new Array(25);
    musicTypes[0] = "R&B";
    musicTypes[1] = "Blues";
    musicTypes[2] = "Jazz";
    

    间接指定数组长度

    如果给数组赋值时指定的数组索数值引大于数组的当前长度,那么数组的长度就会自动的增加。在下面的例子中创建了一个长度为零的数组,然后对数组的99号元素赋值。这样的话数组的元素就增长到了100。

    colors = new Array();
    colors[99] = "midnightblue";
    

    使用正则匹配的结果来创建数组

    正则表达式与字符串之间的匹配结果可以创建一个数组。这个数组包含了正则匹配的属性与匹配结果。RegExp.exec, String.match, 与 String.replace的返回值就是这样的数组。下面的例子可以帮助理解这些属性。

    // Match one d followed by one or more b's followed by one d
    // Remember matched b's and the following d
    // 忽略大小写
    
    myRe = /d(b+)(d)/i;
    myArray = myRe.exec("cdbBdbsbz");
    

    改正则匹配返回的属性/元素列表:

    Property/Element 说明 例子
    input 原始的输入字符串,只读属性。 cdbBdbsbz
    index 匹配的子字符串的第一个字符在原始字符串中的位置(从0开始的索引,只读)。 1
    [0] 最后一次匹配的元素,只读。 dbBd
    [1], ...[n] 出现在正则匹配中的子匹配(如果有)。 [1]: bB
    [2]: d

    先前的版本中的行为

    JavaScript 1.2

    在JavaScript 1.2解析器中,如果将单一整型数字传递给数组的构造器,那么构造器仅仅会创建一个以该数字为第一个元素的、长度为1的数组。例如:

    new Array(5) //创建了第一个元素是5的,仅包含一个元素的数组。
    

     

    JavaScript 1.0

    一个数组的索引需要根据它的序数确定;例如:

    myArray[0].
    

    属性

    constructor
    指定创建对象原型的函数。
    index
    如果数组是通过正则表达式匹配创建的,比配是字符串的下标索引为0.
    input
    如果数组是通过正则表达式匹配创建的,返回原始的字符串。
    length长度
    返回数组中元素个数.
    prototype
    允许为所有对象附加属性.

    方法

    Mutator 方法

    这些方法可以改变数组自身:

    pop
    移除数组的最后一个元素,返回值是被删除的元素。
    push
    在数组的末尾添加一个或者多个元素,返回值是新的数组的长度。
    reverse
    颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在的第一个,也就是数组的索引发生了变化。
    shift
    删除数组的第一个元素,返回值是删除的元素。
    sort
    对数组中的元素进行排序。
    splice
    添加或删除数组中的一个或多个元素。
    unshift
    添加一个或者多个元素在数组的开头,返回值是新的数组的长度。

    Accessor 方法

    need a better name...

    这些过程不改变数组自身These methods do not modify the array and return some representation of the array.

    concat
    返回一个包含此数组和其他数组和/或值的结合的新数组
    indexOf
    返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1。
    join
    将所有的数组元素连接成一个字符串。
    lastIndexOf
    返回在数组中搜索到的与给定参数相等的元素的最后(最大)索引。
    slice
    返回数组中的一段。
    toSource
    Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method.
    toString
    返回代表该数组及其元素的字符,重写Object.toString 过程.
    valueOf
    Returns the primitive value of the array. Overrides the Object.valueOf method.

    循环(迭代)过程

    Several methods take as arguments functions to be called back while processing the array. When these methods are called, the length of the array is sampled, and any element added beyond this length from within the callback is not visited. Other changes to the array (setting the value of or deleting an element) may affect the results of the operation if the method visits the changed element afterwards. The specific behaviour of these methods in such cases is not always well-defined, and should not be relied upon.

    filter
    对数组中的每一个元素调用参数中指定的过滤函数,并将对于过滤函数返回值为true的那些数组元素集合为新的数组返回。
    forEach
    对数组的每一个元素依次调用参数中指定的函数。
    every
    如果数组中每一个元素都满足参数中提供的测试函数,则返回真。
    map
    Creates a new array with the results of calling a provided function on every element in this array.
    some
    如果数组中至少有一个元素满足参数函数的测试,则返回true。

    Generic 方法

    在Javascript数组对象上得许多方法也被设计用于那些看起来像数组的对象上。就是说,他们能被使用在任何一个有一个length属性并且能够通过数值属性名来访问的对象上(就像使用数组array[5]的下标)。

    TODO: 给出使用 Array.prototype.forEach.call 的例子,并且添加这个方法给一个类似 JavaArray 或 String 的对象上。

    一些方法,比如 join,仅仅读取他们被调用的对象的长度和数值属性。 另外,像 reverse 一样,要求对象的数值属性和长度属性是可变的;因此,这些方法不能在像 String 这样的对象上被调用,String不允许它的长度属性和synthesized的数值属性被设置。

    那些在任何类Array对象上起作用并且不必修改长度和数值属性的方法是:

    那些修改被调用的对象的长度或者数字属性的方法是:

    这个例子展示了如何在一个 string 对象上使用 map 获得一个展现字符值的以ASCII编码的字节数组 :

    var a = Array.prototype.map.call("Hello World", 
                                     function(x) { return x.charCodeAt(0); })
    // a now equals [72,101,108,108,111,32,87,111,114,108,100]
    

    例子

    例子:创建数组

    这个例子,创建了一个空数组,长度为0,接着对msgArray[0]赋值,让后对msgArray[99]赋值,数组长度变成了100。

    var msgArray = new Array();
    msgArray[0] = "你好";
    msgArray[99] = "宝贝";
    // 因为数组元素msgArray[99]已经定义,
    // 所以下面的条件成立。
    if (msgArray.length == 100)
       myVar = "数组的长度是100。";
    

    例子:二维数组

    这个例子创建了一个二维数组myVar,然后赋值。

    var myVar = "二维数组实例;\n";
    a = new Array(4);
    for (var i = 0; i < 4; i++) {
       a[i] = new Array(4);
       for (var j = 0; j < 4; j++) {
          a[i][j] = "[" + i + "," + j + "]";
       }
    }
    for (var i = 0; i < 4; i++) {
       str = "Row " + i + ":";
       for (var j = 0; j < 4; j++) {
          str += a[i][j];
       }
       myVar += str + ";\n";
    }
    

    下面是myVar的值:

    二维数组实例;
    Row 0: [0,0][0,1][0,2][0,3];
    Row 1: [1,0][1,1][1,2][1,3];
    Row 2: [2,0][2,1][2,2][2,3];
    Row 3: [3,0][3,1][3,2][3,3];
    

    文档标签和贡献者

    最后编辑者: Yaty,