Phạm vi với bước javascript
Đối tượng 9, giống như mảng trong các ngôn ngữ lập trình khác, cho phép lưu trữ một tập hợp nhiều mục dưới một tên biến duy nhất và có các thành viên cho Show Trong JavaScript, các mảng không phải là nguyên thủy mà thay vào đó là các đối tượng 9 với các đặc điểm cốt lõi sau
9 các đối tượng không thể sử dụng các chuỗi tùy ý làm chỉ mục phần tử (như trong một mảng kết hợp) mà phải sử dụng các số nguyên không âm (hoặc dạng chuỗi tương ứng của chúng). Việc đặt hoặc truy cập thông qua các số không phải là số nguyên sẽ không đặt hoặc truy xuất một phần tử từ chính danh sách mảng, nhưng sẽ đặt hoặc truy cập một biến được liên kết với mảng đó. Các thuộc tính đối tượng của mảng và danh sách các phần tử mảng là riêng biệt và không thể áp dụng các thuộc tính của mảng cho các thuộc tính đã đặt tên nàyCác phần tử mảng là các thuộc tính của đối tượng giống như cách mà 6 là một thuộc tính (tuy nhiên, để cụ thể, 7 là một phương thức). Tuy nhiên, cố gắng truy cập một phần tử của mảng như sau sẽ gây ra lỗi cú pháp vì tên thuộc tính không hợp lệ
Cú pháp JavaScript yêu cầu các thuộc tính bắt đầu bằng một chữ số được truy cập bằng cách sử dụng thay vì ký hiệu dấu chấm. Cũng có thể trích dẫn các chỉ số mảng (e. g. , 8 thay vì 9), mặc dù thường không cần thiết 0 trong 9 được công cụ JavaScript ép buộc thành một chuỗi thông qua chuyển đổi ngầm định 6. Kết quả là, 3 và 4 sẽ đề cập đến hai vị trí khác nhau trên đối tượng 5 và ví dụ sau đây có thể là 6
Chỉ 8 là một chỉ số mảng thực tế. 8 là một thuộc tính chuỗi tùy ý sẽ không được truy cập trong phép lặp mảngThuộc tính 3 và thuộc tính số của một mảng JavaScript được kết nốiMột số phương thức mảng tích hợp sẵn (e. g. , 0, 1, 2, v.v. ) tính đến giá trị của thuộc tính 3 của một mảng khi chúng được gọiCác phương pháp khác (e. g. , 4, 5, v.v. ) cũng dẫn đến việc cập nhật thuộc tính 3 của một mảng
Khi đặt thuộc tính trên mảng JavaScript khi thuộc tính là chỉ mục mảng hợp lệ và chỉ mục đó nằm ngoài giới hạn hiện tại của mảng, công cụ sẽ cập nhật thuộc tính 3 của mảng tương ứng
Tăng 3
Tuy nhiên, việc giảm thuộc tính 3 sẽ xóa các phần tử
Điều này được giải thích thêm trên trang 0Các vị trí trống hoạt động không nhất quán giữa các phương thức mảng. Nói chung, các phương thức cũ hơn sẽ bỏ qua các vị trí trống, trong khi các phương thức mới hơn coi chúng là 1Trong số các phương thức lặp qua nhiều phần tử, các phương thức sau đây thực hiện kiểm tra 2 trước khi truy cập chỉ mục và không kết hợp các vị trí trống với 1
Để biết chính xác cách họ xử lý các vị trí trống, hãy xem trang cho từng phương pháp Các phương pháp này xử lý các vị trí trống như thể chúng là 1
Một số phương thức không thay đổi mảng hiện có mà phương thức được gọi, mà thay vào đó trả về một mảng mới. Họ làm như vậy bằng cách truy cập đầu tiên vào 05 để xác định hàm tạo sẽ sử dụng cho mảng mới. Mảng mới được xây dựng sau đó được phổ biến với các phần tử. Sao chép luôn xảy ra một cách nông cạn — phương thức không bao giờ sao chép bất kỳ thứ gì ngoài mảng được tạo ban đầu. Các phần tử của (các) mảng ban đầu được sao chép vào mảng mới như sau
Các phương thức khác thay đổi mảng mà phương thức được gọi, trong trường hợp đó, giá trị trả về của chúng sẽ khác nhau tùy thuộc vào phương thức. đôi khi là tham chiếu đến cùng một mảng, đôi khi là độ dài của mảng mới Các phương pháp sau tạo mảng mới với 09
Lưu ý rằng 8 và 9 không sử dụng 09 để tạo mảng mới cho mỗi mục nhập nhóm, mà luôn sử dụng hàm tạo 9 đơn giản. Về mặt khái niệm, chúng cũng không phải là phương pháp sao chépCác phương pháp sau đây thay đổi mảng ban đầu
Nhiều phương thức mảng lấy hàm gọi lại làm đối số. Hàm gọi lại được gọi tuần tự và nhiều nhất một lần cho mỗi phần tử trong mảng và giá trị trả về của hàm gọi lại được sử dụng để xác định giá trị trả về của phương thức. Tất cả đều có chung chữ ký
Trường hợp 30 có ba đối số 31Phần tử hiện tại đang được xử lý trong mảng 32Chỉ số của phần tử hiện tại đang được xử lý trong mảng 33Mảng mà phương thức được gọi Giá trị mà 30 dự kiến sẽ trả về phụ thuộc vào phương thức mảng được gọiĐối số 35 (mặc định là 1) sẽ được sử dụng làm giá trị 37 khi gọi 30. Giá trị 37 cuối cùng có thể quan sát được bởi 30 được xác định theo các quy tắc thông thường. nếu 30 là , thì các giá trị nguyên thủy của 37 được bao bọc trong các đối tượng và 1/ 44 được thay thế bằng 45. Đối số 35 không liên quan đối với bất kỳ 30 nào được xác định bằng hàm mũi tên, vì các hàm mũi tên không có ràng buộc 37 của riêng chúngTất cả các phương thức lặp là và , mặc dù chúng hoạt động khác với Các phương pháp sau đây là lặp đi lặp lại
Cụ thể, 6, 4, 5, 6, 7 và 8 không phải lúc nào cũng gọi ___19_______30 trên mọi phần tử — chúng dừng lặp ngay khi giá trị trả về được xác địnhCó hai phương thức khác nhận hàm gọi lại và chạy hàm đó nhiều nhất một lần cho mỗi phần tử trong mảng, nhưng chúng có các dấu hiệu hơi khác so với các phương thức lặp thông thường (ví dụ: chúng không chấp nhận 35)
Phương thức 9 cũng có chức năng gọi lại, nhưng nó không phải là phương thức lặp. Nó thay đổi mảng tại chỗ, không chấp nhận 35 và có thể gọi lại nhiều lần trên một chỉ mụcCác phương thức mảng luôn chung chung — chúng không truy cập bất kỳ dữ liệu nội bộ nào của đối tượng mảng. Họ chỉ truy cập các phần tử mảng thông qua thuộc tính 3 và các phần tử được lập chỉ mục. Điều này có nghĩa là chúng cũng có thể được gọi trên các đối tượng giống như mảng
Chuẩn hóa thuộc tính độ dàiThuộc tính 3 được kẹp vào phạm vi từ 0 đến 253 - 1. 75 trở thành 1, vì vậy ngay cả khi không có 3 hoặc là 1, nó vẫn hoạt động như thể nó có giá trị 1
Một số phương thức mảng thiết lập thuộc tính 3 của đối tượng mảng. Họ luôn đặt giá trị sau khi chuẩn hóa, vì vậy, 3 luôn kết thúc bằng một số nguyên
Các đối tượng giống như mảngThuật ngữ đề cập đến bất kỳ đối tượng nào không ném trong quá trình chuyển đổi 3 được mô tả ở trên. Trong thực tế, đối tượng như vậy được cho là thực sự có thuộc tính 3 và có các phần tử được lập chỉ mục trong phạm vi 1 đến 85. (Nếu nó không có tất cả các chỉ số, nó sẽ có chức năng tương đương với một. )Nhiều đối tượng DOM giống như mảng — ví dụ, 86 và 87. Đối tượng 88 cũng giống như mảng. Bạn có thể gọi các phương thức mảng trên chúng ngay cả khi bản thân chúng không có các phương thức này 0 89Tạo một đối tượng 9 mới 91Trả về hàm tạo 9 93Tạo một thể hiện 9 mới từ một đối tượng dạng mảng hoặc đối tượng có thể lặp lại 95Trả về 6 nếu đối số là một mảng hoặc 97 nếu không 98Tạo một phiên bản 9 mới với số lượng đối số thay đổi, bất kể số lượng hoặc loại đối số 00Phản ánh số lượng phần tử trong một mảng 01Chứa các tên thuộc tính không có trong tiêu chuẩn ECMAScript trước phiên bản ES2015 và được bỏ qua cho mục đích ràng buộc câu lệnh 02 03Trả về mục mảng tại chỉ mục đã cho. Chấp nhận số nguyên âm, đếm ngược từ mục cuối cùng 04Trả về một mảng mới là mảng đang gọi được nối với (các) mảng và/hoặc (các) giá trị khác 05Sao chép một chuỗi các phần tử mảng trong một mảng 06Trả về một đối tượng trình lặp mảng mới chứa các cặp khóa/giá trị cho mỗi chỉ mục trong một mảng 07Trả về 6 nếu mọi phần tử trong mảng đang gọi thỏa mãn chức năng kiểm tra 09Điền vào tất cả các phần tử của một mảng từ chỉ mục bắt đầu đến chỉ mục kết thúc với một giá trị tĩnh 10Trả về một mảng mới chứa tất cả các phần tử của mảng đang gọi mà hàm lọc đã cung cấp trả về 6 12Trả về giá trị của phần tử đầu tiên trong mảng thỏa mãn chức năng kiểm tra được cung cấp hoặc 1 nếu không tìm thấy phần tử thích hợp 14Trả về chỉ mục của phần tử đầu tiên trong mảng thỏa mãn chức năng kiểm tra được cung cấp hoặc 15 nếu không tìm thấy phần tử thích hợp 16Trả về giá trị của phần tử cuối cùng trong mảng thỏa mãn chức năng kiểm tra được cung cấp hoặc 1 nếu không tìm thấy phần tử phù hợp 18Trả về chỉ mục của phần tử cuối cùng trong mảng thỏa mãn chức năng kiểm tra được cung cấp hoặc 15 nếu không tìm thấy phần tử phù hợp 20Trả về một mảng mới với tất cả các phần tử của mảng con được nối vào nó theo cách đệ quy cho đến độ sâu đã chỉ định 21Trả về một mảng mới được hình thành bằng cách áp dụng hàm gọi lại đã cho cho từng phần tử của mảng đang gọi, sau đó làm phẳng kết quả theo một cấp 22Gọi một hàm cho từng phần tử trong mảng gọi 23 Thử nghiệmNhóm các phần tử của một mảng thành một đối tượng theo các chuỗi được trả về bởi hàm kiểm tra 24 Thử nghiệmNhóm các phần tử của một mảng thành một 25 theo các giá trị được hàm kiểm tra trả về 26Xác định xem mảng đang gọi có chứa giá trị hay không, trả về 6 hoặc 97 nếu thích hợp 29Trả về chỉ mục đầu tiên (ít nhất) mà tại đó có thể tìm thấy một phần tử đã cho trong mảng đang gọi 30Nối tất cả các phần tử của một mảng thành một chuỗi 31Trả về một trình vòng lặp mảng mới chứa các khóa cho mỗi chỉ mục trong mảng đang gọi 32Trả về chỉ mục cuối cùng (lớn nhất) mà tại đó có thể tìm thấy một phần tử đã cho trong mảng đang gọi hoặc 15 nếu không tìm thấy phần tử nào 34Trả về một mảng mới chứa kết quả của việc gọi một hàm trên mọi phần tử trong mảng đang gọi 35Loại bỏ phần tử cuối cùng khỏi một mảng và trả về phần tử đó 36Thêm một hoặc nhiều phần tử vào cuối một mảng và trả về 3 mới của mảng 38Thực thi hàm gọi lại "reducer" do người dùng cung cấp trên từng phần tử của mảng (từ trái sang phải), để giảm nó thành một giá trị 39Thực thi chức năng gọi lại "reducer" do người dùng cung cấp trên từng phần tử của mảng (từ phải sang trái), để giảm nó thành một giá trị 40Đảo ngược thứ tự của các phần tử của một mảng tại chỗ. (Đầu tiên trở thành cuối cùng, cuối cùng trở thành đầu tiên. ) 41Loại bỏ phần tử đầu tiên khỏi một mảng và trả về phần tử đó 42Trích xuất một phần của mảng đang gọi và trả về một mảng mới 43Trả về 6 nếu ít nhất một phần tử trong mảng gọi đáp ứng chức năng kiểm tra được cung cấp 45Sắp xếp các phần tử của một mảng tại chỗ và trả về mảng 46Thêm và/hoặc xóa phần tử khỏi mảng 47Trả về một chuỗi được bản địa hóa đại diện cho mảng đang gọi và các phần tử của nó. Ghi đè phương thức 48 49Trả về một chuỗi đại diện cho mảng đang gọi và các phần tử của nó. Ghi đè phương thức 50 51Thêm một hoặc nhiều phần tử vào phía trước của một mảng và trả về 3 mới của mảng 53Trả về một đối tượng trình lặp mảng mới chứa các giá trị cho từng chỉ mục trong mảng 54Bí danh cho phương thức 04 theo mặc địnhPhần này cung cấp một số ví dụ về hoạt động mảng phổ biến trong JavaScript Ghi chú. Nếu bạn chưa quen với kiến thức cơ bản về mảng, trước tiên hãy cân nhắc đọc JavaScript First Steps. Mảng, which và bao gồm các ví dụ khác về hoạt động mảng phổ biến Ví dụ này cho thấy ba cách để tạo mảng mới. đầu tiên sử dụng , sau đó sử dụng hàm tạo 89 và cuối cùng sử dụng 57 để tạo mảng từ một chuỗi 1Ví dụ này sử dụng phương thức 0 để tạo một chuỗi từ mảng 59 2Ví dụ này cho thấy cách truy cập các mục trong mảng 59 bằng cách chỉ định số chỉ mục của vị trí của chúng trong mảng 3Ví dụ này sử dụng phương thức 2 để tìm vị trí (chỉ số) của chuỗi 62 trong mảng 59 4Ví dụ này chỉ ra hai cách để kiểm tra xem mảng 59 có chứa 62 và 66 hay không. đầu tiên với phương pháp 00, sau đó với phương pháp 2 để kiểm tra giá trị chỉ mục không phải là 15 5Ví dụ này sử dụng phương thức 4 để nối một chuỗi mới vào mảng 59 6Ví dụ này sử dụng phương thức 23 để xóa phần tử cuối cùng khỏi mảng 59 7Ghi chú. 23 chỉ có thể được sử dụng để xóa phần tử cuối cùng khỏi một mảng. Để xóa nhiều mục khỏi phần cuối của một mảng, hãy xem ví dụ tiếp theoVí dụ này sử dụng phương thức 5 để xóa 3 mục cuối cùng khỏi mảng 59 8Ví dụ này sử dụng phương thức 5 để cắt mảng 59 xuống chỉ còn 2 mục đầu tiên của nó 9Ví dụ này sử dụng phương thức 26 để xóa mục đầu tiên khỏi mảng 59 0Ghi chú. Chỉ có thể sử dụng 26 để xóa phần tử đầu tiên khỏi mảng. Để xóa nhiều mục khỏi đầu một mảng, hãy xem ví dụ tiếp theoVí dụ này sử dụng phương thức 5 để xóa 3 mục đầu tiên khỏi mảng 59 1Ví dụ này sử dụng phương thức 29 để thêm, tại chỉ mục 1, một mục mới vào mảng 59 — biến nó thành mục đầu tiên mới trong mảng 2Ví dụ này sử dụng phương pháp 5 để xóa chuỗi 62 khỏi mảng 59 — bằng cách chỉ định vị trí chỉ mục của 62 3Ví dụ này sử dụng phương thức 5 để xóa các chuỗi 62 và 93 khỏi mảng 59 — bằng cách chỉ định vị trí chỉ mục của 62, cùng với số lượng tổng số mục cần xóa 4Ví dụ này sử dụng phương thức 5 để thay thế 2 mục cuối cùng trong mảng 59 bằng các mục mới 5Ví dụ này sử dụng vòng lặp 98 để lặp qua mảng 59, ghi nhật ký từng mục vào bảng điều khiển 6Nhưng 98 chỉ là một trong nhiều cách để lặp qua bất kỳ mảng nào; Ví dụ này sử dụng phương thức 0 để gọi một hàm trên từng phần tử trong mảng 59; 7Ví dụ này sử dụng phương thức 4 để hợp nhất mảng 59 với mảng 12, để tạo ra một mảng 13 mới. Lưu ý rằng 59 và 12 không thay đổi 8Ví dụ này chỉ ra ba cách để tạo một mảng mới từ mảng 59 hiện có. đầu tiên bằng cách sử dụng cú pháp trải rộng, sau đó bằng cách sử dụng phương thức 17, sau đó bằng cách sử dụng phương thức 1 9Tất cả các hoạt động sao chép mảng tích hợp sẵn (cú pháp trải rộng, 93, 42 và 04) tạo ra các bản sao nông. Thay vào đó, nếu bạn muốn có một bản sao sâu của một mảng, bạn có thể sử dụng 22 để chuyển đổi mảng đó thành một chuỗi JSON, sau đó 23 để chuyển đổi lại chuỗi thành một mảng mới hoàn toàn độc lập với mảng ban đầu 0Bạn cũng có thể tạo các bản sao sâu bằng cách sử dụng phương pháp 24, phương thức này có ưu điểm là cho phép các đối tượng có thể chuyển nhượng trong nguồn được chuyển sang bản sao mới, thay vì chỉ được sao chépCuối cùng, điều quan trọng là phải hiểu rằng việc gán một mảng hiện có cho một biến mới không tạo ra một bản sao của mảng hoặc các phần tử của nó. Thay vào đó, biến mới chỉ là một tham chiếu hoặc bí danh cho mảng ban đầu; . Do đó, nếu bạn thực hiện bất kỳ thay đổi nào đối với giá trị của mảng ban đầu hoặc giá trị của biến mới, thì biến kia cũng sẽ thay đổi theo. 1Có thể sử dụng các phương thức 23 để nhóm các phần tử của một mảng, sử dụng hàm kiểm tra trả về một chuỗi cho biết nhóm của phần tử hiện tạiỞ đây chúng ta có một mảng hàng tồn kho đơn giản chứa các đối tượng "thực phẩm" có 26 và 27 2Để sử dụng 8, bạn cung cấp một hàm gọi lại được gọi với phần tử hiện tại, và tùy chọn chỉ mục và mảng hiện tại, đồng thời trả về một chuỗi cho biết nhóm của phần tửMã bên dưới sử dụng hàm mũi tên để trả về 27 của mỗi phần tử mảng (điều này sử dụng để giải nén phần tử 27 khỏi đối tượng đã truyền). Kết quả là một đối tượng có các thuộc tính được đặt tên theo các chuỗi duy nhất được gọi lại. Mỗi thuộc tính được gán một mảng chứa các phần tử trong nhóm 3Lưu ý rằng đối tượng được trả về tham chiếu các phần tử giống như mảng ban đầu (không phải bản sao sâu). Việc thay đổi cấu trúc bên trong của các phần tử này sẽ được phản ánh trong cả mảng ban đầu và đối tượng được trả về Ví dụ: nếu bạn không thể sử dụng một chuỗi làm khóa, nếu thông tin cần nhóm được liên kết với một đối tượng có thể thay đổi, thì bạn có thể sử dụng 24 để thay thế. Điều này rất giống với 32 ngoại trừ việc nó nhóm các phần tử của mảng thành một 25 có thể sử dụng một giá trị tùy ý (đối tượng hoặc nguyên thủy) làm khóaSau đây tạo một bàn cờ dưới dạng một chuỗi hai chiều. Bước đầu tiên được thực hiện bằng cách sao chép 34 trong 35 sang 36. Vị trí cũ tại 37 được để trống 4Đây là đầu ra 5 6Kết quả trong 7Kết quả của sự trùng khớp giữa 38 và một chuỗi có thể tạo ra một mảng JavaScript có các thuộc tính và phần tử cung cấp thông tin về sự trùng khớp. Một mảng như vậy được trả về bởi 39 và 40 |