Symbol trong javascript
Chào các bạn
Trong bài viết này mình sẽ hướng dẫn về ký hiệu symbol.
- Vậy symbol là gì?.
symbol là một đối tượng một nhà xây dựng trả về một giá trị nguyên thủy.
Tham số truyền vào của symbol có thể là 1 trong 2 kiểu
- string mô tả kiểu ký hiệu string
1let id = Symbol("id"); // Tạo mới ký hiệu có mô tả là chuỗi id
id ở đây là chuỗi tùy ý. Ví dụ thay id thành giCungDuoc
- number mô tả kiểu ký hiệu number
1let id = Symbol(323); // Tạo mới ký hiệu có mô tả là số 323
323 là số tùy ý. Ví dụ thay 323 thành 1
Các ký hiệu symbol luôn luôn khác nhau mặc dù chúng có mô tả giống nhau
1let id1 = Symbol("id"); // Mô tả chuỗi id giống nhau 2let id2 = Symbol("id"); // Mô tả chuỗi id giống nhau 3 4console.log(id1 === id2); // false
Như các bạn nhìn thấy ở ví dụ trên. Mặc dù chúng ta truyền vào mô tả id cho ký hiệu giống nhau. Nhưng khi so sánh chúng khác nhau.
Ký hiệu symbol không thể gọi với từ khóa new
1let id = new Symbol("id"); // Uncaught TypeError: Symbol is not a constructor
Nếu chúng ta cố gắng gọi nó bằng từ khóa new nó sẽ ném ra lỗi có tên là TypeError và tin nhắn của nó là Symbol is not a constructor
Để lấy ra mô tả symbol bằng cách
1let id = Symbol("ID"); 2 3let moTa = id.description; // Lấy ra mô tả 4console.log(moTa); // ID
ID ở đây chính là mô tả ký hiệu
Ngoài ra còn có ký hiệu toàn cầu Symbol.for("id")
Như bạn thấy ở trên ký hiệu symbol luôn luôn khác nhau mặc dù chúng ta truyền vào mô tả giống nhau.
Nhưng Symbol.for("mota") thì lại khác. Chúng giống nhau nếu chúng ta truyền vào mô tả giống nhau.
1let id1 = Symbol.for("id"); // Ký hiệu toàn cầu 2let id2 = Symbol.for("id"); // Ký hiệu toàn cầu 3 4console.log(id1 === id2); // true
Nếu chúng ta truyển mô tả khác nhau thì nó sẽ khác nhau
1let id1 = Symbol.for("id"); // Ký hiệu toàn cầu 2let id2 = Symbol.for("id2");// Ký hiệu toàn cầu 3 4console.log(id1 === id2); // false
Để xem mô tả ký hiệu chúng ta đã truyền bằng cách
1let id = Symbol.for("ID"); 2 3let moTa = id.description; // Lấy ra mô tả 4console.log(moTa); // ID
ID ở trên chính là mô tả
Vậy câu hỏi đặt ra ở đây là.
Ký hiệu dùng để làm gì?.
Ký hiệu symbol giúp chúng ta ẩn giấu một thông tin gì đó mà không muốn ai biết.
- Không dùng ký hiệu:
1let user = { 2 id: 1, 3 name: "Hồ Quang Trí", 4 age: 100 5} 6 7for(let key in user) { 8 console.log(key); // id, name, age 9}
- Dùng ký hiệu:
1let id = Symbol(1); // Ký hiệu có mô tả là số 1 2 3let user = { 4 [id]: "Ký hiệu ẩn", 5 name: "Hồ Quang Trí", 6 age: 100 7} 8 9for(let key in user) { 10 console.log(key); // name, age 11}
Như bạn có thể thấy ký hiệu id bây giờ không suất hiện trong vòng lặp nữa.
Bạn có thể lấy ra giá trị trong ký hiệu đó bằng cách
1let id = Symbol(1); // Ký hiệu có mô tả là số 1 2 3let user = { 4 [id]: "Ký hiệu ẩn", 5 name: "Hồ Quang Trí", 6 age: 100 7} 8 9for(let key in user) { 10 console.log(key); // name, age 11} 12 13 14let giaTriKyHieu = user[id]; // Lấy ra giá trị 15console.log(giaTriKyHieu); // Ký hiệu ẩn
Tổng kết
Trong bài viết này mình đã nói qua về ký hiệu symbol.
Các bạn muốn tìm hiểu thêm về nó hãy xem tại đây Symbol
- symbol
- ký hiệu
- object
Các bài viết liên quan
Viết chương trình in tất cả các số từ 0 đến n
Trong bài này mình sẽ hướng dẫn các bạn từng bước. Rất đơn giảnGiải ThuậtThêm phương pháp vào trong đối tượng trong javascript
Cùng nhau tìm hiễu các cách thêm phương pháp vào trong đối tượng trong jsJavascriptthis trong javascript
Trong javascript this luôn luôn đại diện cho một đối tượng trước dấu chấm .Javascriptnew function trong javascript
Tạo mới đối tượng bằng từ khóa new theo chức năng ta định nghĩaJavascript