Object chỉ chấp nhận các khóa chuỗi và ký hiệu. Các loại khác sẽ được chuyển đổi tự động thành chuỗi. Mapmặt khác chấp nhận bất kỳ loại khóa nào.
Chúng ta có thể lặp lại các thuộc tính của một câu lệnh Mapsử dụng trực tiếp forEachhoặc for ... of:
const styles = new Map();
styles.set('color', 'blue');
styles.set('fontSize', '12px');
styles.forEach((value, key) => console.log(key, '=', value));
// Output:
// color = blue
// fontSize = 12px
Các đối tượng không thể lặp lại trực tiếp. Để lặp qua các thuộc tính của một đối tượng, chúng ta phải sử dụng Object.keys hoặc Object.values để Object.entries nhận danh sách các khóa, giá trị hoặc các cặp khóa và giá trị.
Với Map, không thể lấy dữ liệu thích hợp khi được tuần tự hóa với JSON:
const person = new Map();
person.set('name', 'Foo');
person.set('age', 20);
JSON.stringify(person); // "{}"
Tốt để biết
Map giữ thứ tự của các mục. Nó có nghĩa là khi bạn lặp lại các phím của Map , chúng ta sẽ thấy thứ tự tương tự như khi chúng được chèn vào Map .
Nó đúng với các đối tượng chỉ bao gồm các phím chuỗi và ký hiệu. Thứ tự các khóa của đối tượng không được giữ nếu có một khóa cần được chuyển đổi thành chuỗi.
Nếu chúng ta muốn lưu trữ các cặp khóa / giá trị mà không cần quan tâm đến việc tuần tự hóa chúng trong JSON, thì hãy sử dụng Map. Lặp lại và lấy kích thước của bản đồ thoải mái hơn so với làm với một đối tượng.
Objectnên được sử dụng nếu chúng ta muốn chuyển đổi qua lại giữa dữ liệu thô và JSON hoặc bao gồm một logic nghiệp vụ cụ thể:
const person = {
firstName: 'Foo',
lastName: 'Bar',
getFullName: function () {
return `\${this.firstName} \${this.lastName}`;
},
};