Là một kiểu dữ liệu thuộc loại primitive1.
Creating Symbol
Khởi tạo bằng cách dùng constructor của Symbol và truyền vào một chuỗi (ta gọi chuỗi này là description của symbol).
// Creating symbol
const symbol = Symbol()
typeof symbol // symbolHai đối tượng symbol có cùng description sẽ không giống nhau do mỗi đối tượng đều là duy nhất:
// Two symbols with the same description
const symbol1 = Symbol("hello")
const symbol2 = Symbol("hello")
console.log(symbol1 === symbol2) // falseAccess Symbol Description
Truy cập đến description của symbol thông qua thuộc tính description:
const symbol = Symbol("hey")
console.log(symbol.description) // heyAdd Symbol as an Object Key
Chúng ta có thể dùng symbol để làm object key bằng cách dùng toán tử []:
let id = Symbol("id")
let person = {
name: "Jack",
// Adding symbol as a key
[id]: 123, // not "id": 123
}
console.log(person) // {name: "Jack", Symbol(id): 123}Các thuộc tính sử dụng symbol làm key sẽ không xuất hiện ở trong vòng lặp for in:
let id = Symbol("id")
let person = {
name: "Jack",
age: 25,
[id]: 12,
}
// using for...in
for (let key in person) {
console.log(key)
}Output:
name
ageBenefit of Using Symbols in Object
Kiểu symbol thường được dùng để tạo ra các thuộc tính không trùng lặp trong đối tượng.
Trong đoạn code bên dưới, nếu object person được dùng ở những chương trình khác, có thể xảy ra trường hợp các chương trình đều thêm vào object cùng một thuộc tính id và dẫn đến thuộc tính thêm vào sau sẽ override giá trị trước đó2.
let person = {
name: "Jack",
}
// Using string as key
person.id = 12
console.log(person.id) // 12
// Another program overwrites value
person.id = "Another value"
console.log(person.id) // Another valueĐể giải quyết vấn đề trên, ta có thể dùng key có kiểu là symbol:
let person = {
name: "Jack",
}
let id = Symbol("id")
person[id] = 12Chương trình khác cũng làm tương tự:
let person = {
name: "Jack",
}
let id = Symbol("id")
person[id] = "Another value"Cách làm này giúp giải quyết vấn đề trùng lặp key của các thuộc tính giữa nhiều chương trình khác nhau.
Resources
Footnotes
-
xem thêm JS Data Types. ↩
-
xem thêm JS Objects. ↩