Các kí hiệu như các tên đặc tính
Cú pháp đặc tính tính toán làm lẫn nhau thành đặc tính object literal rất quan trọng. Trong ES6 và sau này, các tên
đặc tính có thể là các strings hay kí hiệu. Nếu bạn gán một kí hiệu vào một biến hay hằng, thì bạn có thể sử dụng
kí hiệu đó như một tên đặc tính sử dụng cú pháp đặc tính tính toán:
const extension = Symbol(“my extension symbol”);
let o = {[extension]: { /* extension data stored in this object */ }
};
o[extension].x = 0; // This won’t conflict with other properties of o
Như giải thích ở các học phần trước, các kí hiệu là các giá trị kém thông minh. Bạn không thể làm bất cứ gì với
chúng hơn là sử dụng chúng như các tên đặc tính. Mọi kí hiệu là khác với mọi cái khác. Kí hiệu, tuy nhiên, cái
có nghĩa rằng các kí hiệu là tốt cho tạo các tên đặc tính duy nhất. Tạo một kí hiệu mới bằng cách gọi hàm factory
Symbol() (Các kí hiệu là các giá trị nguyên thủy, không phải là các objects, nên Symbol() không phải là một hàm
constructor cái bạn khởi động với new). Giá trị trả về bởi Symbol() không bằng với bất cứ kí hiệu khác hay giá trị
khác. Bạn có thể truyền một string tới Symbol(), và string này được sử dụng khi kí hiệu của bạn được chuyển đổi
thành một string. Nhưng cái này chỉ là một hỗ trợ debug: 2 kí hiệu tạo với cùng đối số string vẫn là khác lẫn nhau.
Điểm của các kí hiệu không phải là an ninh, nhưng để định nghĩa một cơ chế mở rộng an toàn cho các Javascript objects.
Nếu bạn nhận một object từ code bên thứ ba cái bạn không kiểm soát và cần thêm một vài đặc tính của bản thân bạn
vào object đó nhưng muốn đảm bảo rằng các đặc tính của bạn sẽ không xung đột với bất cứ đặc tính khác cái có thể
đã tồn tại trên object, bạn có thể an toàn sử dụng các kí hiệu như các tên đặc tính. Nếu bạn làm cái này, bạn cũng
có thể là tự tin rằng code bên thứ ba sẽ không tình cờ thay đổi các đặc tính đặt tên bằng kí hiệu (Code bên thứ ba đó
có thể, tất nhiên, sử dụng Object.getOwnPropertySymbols() để khám phá các kí hiệu bạn đang sử dụng và sau đó có
thể thay đổi hay xóa các đặc tính của bạn. Đây là tại sao các kí hiệu không phải là một cơ chế an ninh).
