Ngoài việc sử dụng bản đồ- như đối tượng, đã có một Map
object thực tế trong một thời gian bây giờ, trong đó có sẵn trong nguyên cảo khi biên soạn để ES6, hoặc khi sử dụng một polyfill với ES6 type-definitions:
let people = new Map<string, Person>();
Nó hỗ trợ các chức năng tương tự như Object
, và hơn nữa, với một cú pháp hơi khác nhau:
// Adding an item (a key-value pair):
people.set("John", { firstName: "John", lastName: "Doe" });
// Checking for the presence of a key:
people.has("John"); // true
// Retrieving a value by a key:
people.get("John").lastName; // "Doe"
// Deleting an item by a key:
people.delete("John");
này mình có một số ưu điểm so với sử dụng một Vẽ bản đồ như đối tượng, chẳng hạn như:
- Hỗ trợ các khóa không dựa trên chuỗi, ví dụ: số hoặc các đối tượng, không ai trong số đó được hỗ trợ bởi
Object
(không, Object
không hỗ trợ số, nó chuyển đổi chúng thành chuỗi)
- Ít chỗ cho sai sót khi không sử dụng
--noImplicitAny
, như một Map
luôn có một phím loại và một giá trị loại, trong khi một đối tượng thể không có một chỉ số thực chữ ký
- chức năng thêm/gỡ bỏ các mục (cặp khóa-giá trị) được tối ưu hóa cho công việc, unlike creating properties on an
Object
một theo đó, một đối tượng Map
cung cấp một API mạnh mẽ và thanh lịch hơn cho các tác vụ thông thường, hầu hết không có sẵn thông qua đơn giản Object
s mà không cần hack các hàm trợ giúp khác nhau (mặc dù một số yêu cầu một polyfter lặp/lặp lại đầy đủ ES6 cho các mục tiêu ES5 hoặc bên dưới) :
// Iterate over Map entries:
people.forEach((person, key) => ...);
// Clear the Map:
people.clear();
// Get Map size:
people.size;
// Extract keys into array (in insertion order):
let keys = Array.from(people.keys());
// Extract values into array (in insertion order):
let values = Array.from(people.values());
Nguồn
2017-02-14 10:36:14
Bài đăng cũ nhưng lưu ý rằng có Bản đồ ES6 –