Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Array

This translation is incomplete. Please help translate this article from English.

JavaScript Mảng đối tượng toàn cầu là một nhà xây dựng cho các mảng, mà là cấp cao, các đối tượng danh sách giống.

Cú pháp

[ element0 , element1 , ..., elementN ]
new Array ( element0 , element1 [, ... [, elementN ]])
new Array ( arrayLength )
nguyên tố N
Một mảng JavaScript được khởi tạo với các yếu tố nhất định, ngoại trừ trong trường hợp một đối số duy nhất được truyền vào mảng xây dựng và lập luận đó là một con số. (Xem bên dưới). Lưu ý rằng trường hợp đặc biệt này chỉ áp dụng cho các mảng JavaScript tạo ra với các mảng xây dựng, không mảng literals tạo ra với cú pháp khung.
arrayLength
Nếu đối số duy nhất được truyền cho các mảng constructor là một số nguyên giữa 0 và 2 32 -1 (bao gồm), điều này trả về một mảng JavaScript mới với chiều dài thiết lập để con số đó. Nếu đối số là số nào khác, một RangeError ngoại lệ được ném ra.

Miêu tả

Mảng là đối tượng danh sách giống như nguyên mẫu mà có phương pháp để thực hiện traversal và đột biến hoạt động. Cả chiều dài của một mảng JavaScript hay các loại của các yếu tố của nó được cố định. Vì chiều dài kích thước của một mảng lớn hoặc thu nhỏ bất cứ lúc nào, các mảng JavaScript là không đảm bảo được dày đặc. Nói chung, đây là những đặc điểm thuận tiện; nhưng nếu các tính năng này không được mong muốn sử dụng cụ thể của bạn, bạn có thể xem xét sử dụng các mảng gõ.

Một số người nghĩ rằng bạn không nên sử dụng một mảng như là một mảng kết hợp . Trong mọi trường hợp, bạn có thể sử dụng đồng bằng đối tượng thay vào đó, mặc dù làm như vậy đi kèm với hãy cẩn thận của mình. Xem các bài viết từ điển JavaScript nhẹ với các phím tùy ý như là một ví dụ.

Truy cập vào các phần tử mảng

Mảng JavaScript được zero-lập chỉ mục: phần tử đầu tiên của mảng là lúc chỉ số 0 , và các yếu tố cuối cùng là chỉ số tương đương với giá trị của của mảng chiều dài tài sản trừ đi 1.

var arr = ['đây là yếu tố đầu tiên "," đây là yếu tố thứ hai'];
console.log (arr [0]); // Nhật ký này là yếu tố đầu tiên '
console.log (arr [1]); // Nhật ký này là yếu tố thứ hai '
console.log (arr [arr.length - 1]); // Nhật ký này là yếu tố thứ hai '

Các phần tử mảng là thuộc tính đối tượng trong cùng một cách mà toString là một tài sản, nhưng cố gắng để truy cập vào một phần tử của mảng như sau ném một lỗi cú pháp, bởi vì tên sở hữu là không hợp lệ:

console.log (arr.0); // Một lỗi cú pháp

Có gì đặc biệt về mảng JavaScript và các tài sản mà gây ra điều này là. Tính JavaScript bắt đầu bằng một chữ số không thể được tham chiếu với ký hiệu dấu chấm; và phải được truy cập bằng cách sử dụng ký hiệu khung. Ví dụ, nếu bạn đã có một đối tượng với một tài sản có tên '3D' , nó chỉ có thể được tham chiếu bằng cách sử dụng ký hiệu khung. Ví dụ như:

var năm = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
console.log (years.0); // Một lỗi cú pháp
console.log (năm [0]); // Làm việc đúng
renderer.3d.setTexture (mô hình, 'character.png'); // Một lỗi cú pháp
renderer ['3D'] setTexture (mô hình, 'character.png.'); // Làm việc đúng

Lưu ý rằng trong 3d dụ, '3D' đã được trích dẫn. Có thể trích dẫn các chỉ số mảng JavaScript cũng như (ví dụ, năm ['2'] thay vì năm [2] ), mặc dù nó không cần thiết. 2 trong năm [2] là bị cưỡng chế vào một chuỗi các công cụ JavaScript thông qua một tiềm ẩn toString chuyển đổi. Chính vì lý do này mà '2''02' sẽ chỉ đến hai khe cắm khác nhau trên năm đối tượng và các ví dụ sau đây có thể là sự thật :

console.log (năm ['2'] = năm ['02 ']!);

(!) Từ Tương tự như vậy, thuộc tính đối tượng đó xảy ra để được dành riêng chỉ có thể được truy cập như các chuỗi trong ký hiệu khung:

var lời hứa = {
  'Var': 'text',
  'Mảng': [1, 2, 3, 4]
};

console.log (lời hứa ['mảng']);

Mối quan hệ giữa chiều dài và số tài sản

Một mảng của JavaScript chiều dài tài sản và tính toán được kết nối. Một số phương pháp mảng xây dựng trong (ví dụ, tham gia, lát cắt, indexOf , vv) có tính đến các giá trị của một mảng chiều dài tài sản khi chúng được gọi. Các phương pháp khác (ví dụ, đẩy, mối nối, vv) cũng cho kết quả trong bản cập nhật tới một mảng của { {jsxref ("Array.length", "chiều dài")}} tài sản.

trái cây var = [];
fruits.push ('chuối', 'táo', 'đào');

console.log (fruits.length); // 3

Khi thiết lập một tài sản trên một mảng JavaScript khi tài sản là một chỉ số mảng hợp lệ và chỉ số đó là ngoài giới hạn hiện tại của mảng, động cơ sẽ cập nhật của mảng chiều dài bất động sản cho phù hợp:

trái cây [5] = 'xoài;
console.log (quả [5]); // 'Xoài'
console.log (Object.keys (trái cây)); // ['0', '1', '2', '5']
console.log (fruits.length); // 6

Tăng chiều dài.

fruits.length = 10;
console.log (Object.keys (trái cây)); // ['0', '1', '2', '5']
console.log (fruits.length); // 10

Giảm chiều dài sở hữu hiện, tuy nhiên, xóa các phần tử.

fruits.length = 2;
console.log (Object.keys (trái cây)); // ['0', '1']
console.log (fruits.length); // 2

Điều này được giải thích thêm về Array.length trang.

Tạo một mảng bằng cách sử dụng kết quả của một trận đấu

Kết quả của một trận đấu giữa một biểu hiện thường xuyên và một chuỗi có thể tạo ra một mảng JavaScript. Mảng này có các tính chất và các yếu tố trong đó cung cấp thông tin về trận đấu. Một mảng đó được trả về bởi RegExp.exec, String.matchstring.Replace. Để giúp giải thích các thuộc tính và các yếu tố, nhìn vào ví dụ sau đây và sau đó tham khảo bảng dưới đây:

// Trận đấu một d theo sau bởi một hoặc nhiều b theo sau bởi một d
// Ghi phù hợp của b và d sau
// Bỏ qua trường hợp

var Myre = / d (b +) (d) / i;
var myArray = myRe.exec ('cdbBdbsbz');

Các tính chất và các yếu tố trở về từ trận đấu này như sau:

Bất động sản / tử Miêu tả Thí dụ
đầu vào Một thuộc tính chỉ đọc phản ánh các chuỗi ban đầu dựa vào đó các biểu thức chính quy được kết hợp. cdbBdbsbz
mục lục Một thuộc tính chỉ đọc mà là chỉ số không dựa trên các trận đấu trong chuỗi. 1
[0] Một yếu tố chỉ đọc mà xác định các ký tự tương ứng cuối cùng. dbBd
[1], ... [n] Chỉ đọc các yếu tố đó chỉ định các trận đấu substring parenthesized, nếu có trong các biểu hiện thường xuyên. Số lượng các chuỗi con trong ngoặc có thể là không giới hạn. [1]: bB
[2]: d

Thuộc tính

For properties available on Array instances, see Properties of Array instances.
Array.length
Các mảng tài sản dài constructor của có giá trị là 1.
Array.prototype
Cho phép bổ sung các thuộc tính cho tất cả các đối tượng mảng.

Phương pháp

For phương pháp available on Array instances, see Phương pháp of Array instances.
Array.from()
Tạo ra một mới Mảng dụ từ một đối tượng mảng giống hoặc iterable.
Array.isArray()
Trả về true nếu một biến là một mảng, nếu không sai.
Array.observe()
Không đồng bộ quan sát những thay đổi để Mảng, tương tự như Object.observe () cho các đối tượng. Nó cung cấp một dòng thay đổi theo thứ tự xuất hiện.
Array.of()
Tạo ra một mới Mảng dụ với một số biến của các đối số, bất kể số lượng hoặc loại của các đối số.

Mảng trường

Tất cả Mảng trường hợp thừa kế từ Array.prototype. Các đối tượng nguyên mẫu của mảng constructor có thể được sửa đổi để ảnh hưởng đến tất cả các mảng trường.

Thuộc tính

Phương pháp

Phương pháp mutator

Phương pháp accessor

Phương pháp lặp đi lặp lại

Mảng phương pháp chung

Đôi khi bạn muốn áp dụng phương pháp mảng các chuỗi hoặc các đối tượng mảng giống khác (chẳng hạn như chức năng lý luận). Bằng cách này, bạn đối xử với một chuỗi như là một mảng kí tự (hoặc nếu không điều trị một phi mảng như là một mảng). Ví dụ, để kiểm tra xem tất cả các nhân vật trong biến str là một lá thư, bạn có thể viết:

chức năng isLetter (nhân vật) {
  trả lại nhân vật> = 'a' nhân vật && <= 'z';
}

if (Array.prototype.every.call (str, isLetter)) {
  console.log ("Chuỗi '" + str + "' chỉ chứa các chữ cái!");
}

Ký hiệu này là khá lãng phí và JavaScript 1.6 giới thiệu một cách viết tắt chung:

if (Array.every (str, isLetter)) {
  console.log ("Chuỗi '" + str + "' chỉ chứa các chữ cái!");
}

Generics cũng có sẵn trên String.

Đây là những hiện không nằm trong tiêu chuẩn ECMAScript (dù ES6 Array.from () có thể được sử dụng để đạt được điều này). Sau đây là một shim để cho phép sử dụng của nó trong tất cả các trình duyệt:

// Giả extras Mảng đã hiện diện (một người có thể sử dụng cho những polyfills cũng)
(Function () {
  'Sử dụng nghiêm ngặt;

  var i,
    // Chúng ta cũng có thể xây dựng các mảng của các phương pháp với những điều sau đây, nhưng
    // GetOwnPropertyNames () là phương pháp không shimable:
    // Object.getOwnPropertyNames (Array) .filter (function (methodName) {
    // Trả typeof Array [methodName] === 'chức năng'
    //});
    phương pháp = [
      'Tham gia', 'đảo ngược', 'sắp xếp', 'đẩy', 'pop', 'thay đổi', 'unshift',
      'Nối', 'concat', 'miếng', 'indexOf', 'lastIndexOf',
      'Foreach', 'bản đồ', 'giảm', 'reduceRight', 'lọc',
      'Một số', 'hàng'
    ],
    methodCount = methods.length,
    assignArrayGeneric = function (methodName) {
      nếu (Mảng! [methodName]) {
        Phương pháp var = Array.prototype [methodName];
        if (typeof phương pháp === 'chức năng') {
          Array [methodName] = function () {
            trở method.call.apply (phương pháp, đối số);
          };
        }
      }
    };

  for (i = 0; i <methodCount; i ++) {
    assignArrayGeneric (phương pháp [i]);
  }
} ());

Ví dụ

Tạo một mảng

Ví dụ sau tạo một mảng, msgArray , với chiều dài 0, sau đó gán giá trị cho [0] msgArraymsgArray [99] , thay đổi độ dài của mảng đến 100.

var msgArray = [];
msgArray [0] = "Hello";
msgArray [99] = 'thế giới';

if (msgArray.length === 100) {
  console.log ('The chiều dài là 100');
}

Tạo một mảng hai chiều

Những điều sau đây tạo ra một bàn cờ như là một mảng hai chiều của chuỗi. Động thái đầu tiên được thực hiện bằng cách sao chép 'p' trong (6,4) đến (4,4). Các vị trí cũ (6,4) được làm trống.

var board = [ 
  ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R'],
  ['P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'],
  ['', '', '', '', '', '', '', ''],
  ['', '', '', '', '', '', '', ''],
  ['', '', '', '', '', '', '', ''],
  ['', '', '', '', '', '', '', ''],
  ['P', 'p', 'p', 'p', 'p', 'p', 'p', 'p'],
  ['R', 'n', 'b', 'q', 'k', 'b', 'n', 'r']];

console.log (board.join ('\ n') + '\ n \ n');

// Dịch King Cầm đồ phía trước 2
hội đồng quản trị [4] [4] = hội đồng quản trị [6] [4];
hội đồng quản trị [6] [4] = '';
console.log (board.join ('\ n'));

Đây là kết quả:

R, N, B, Q, K, B, N, R
P, P, P, P, P, P, P, P
 ,,,,,,, 
 ,,,,,,, 
 ,,,,,,, 
 ,,,,,,, 
p, p, p, p, p, p, p, p
r, n, b, q, k, b, n, r

R, N, B, Q, K, B, N, R
P, P, P, P, P, P, P, P
 ,,,,,,, 
 ,,,,,,, 
 ,,,, P,,, 
 ,,,,,,, 
p, p, p, p,, p, p, p
r, n, b, q, k, b, n, r

Thông số kỹ thuật

Thông số kỹ thuật Status Chú thích
ECMAScript 1st Edition. Tiêu chuẩn Định nghĩa ban đầu.
ECMAScript 5.1 (ECMA-262)
The definition of 'Array' in that specification.
Standard Phương pháp mới được thêm vào: Array.isArray, indexOf, lastIndexOf , every, some, foreach, map, filter, reduce, reduceRight
ECMAScript 6 (ECMA-262)
The definition of 'Array' in that specification.
Release Candidate Phương pháp mới được thêm vào: Array.from, Array.of, find, findIndex, fill, copyWithin

Khả năng tương thích trình duyệt

Đặc tính Cơ rôm Firefox (Gecko) Internet Explorer Nhạc kịch Safari
Hỗ trợ cơ bản (Yes) (Yes) (Yes) (Yes) (Yes)
Đặc tính Android Chrome dành cho Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Hỗ trợ cơ bản (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Xem thêm

Document Tags and Contributors

Tags: 
 Contributors to this page: teoli
 Last updated by: teoli,