DANH MỤC: ECMAscript

Bài 12: Symbol Type trong ES6


Tiếp tục với series, ở bài thứ 12 này chúng ta sẽ tìm hiểu về một kiểu dữ liệu mới được thêm vào trong ES6, đó là symbol.

1, Symbol là gì?

Symbol là một kiểu dữ liệu được sinh ra nhằm tao ra các giá trị duy nhất, mỗi một symbol được tạo ra sẽ có một giá trị khác nhau và giá trị đó là duy nhất. Và bạn cũng không có thể in ra giá trị của nó!

Điều này hoàn toàn có lợi cho chúng ta trong việc sinh ra các key cho đối tượng.

Để khai báo một Symbol thì chúng ta sử dụng cú pháp:

Symbol();
//hoặc
Symbol(key);

Trong đó, key là giá trị bạn muốn truyền vào Symbol, giá trị này có thể coi như một token.

VD: Mình sẽ khởi tạo một Symbol.

var sym = Symbol();

Để chứng minh giá trị này luôn là duy nhất thì bạn có thể so sánh chúng với nhau.

VD:

var sym1 = Symbol();
var sym2 = Symbol();
console.log(sym1 == sym2);

Ở ví dụ trên bạn reload mỏi tay thì nó vẫn luôn luôn bằng false.

Và đểm kiểm tra xem một biến, hằng,... có là một Symbol hay không thì mọi người có thể sử dụng typeof để kiểm tra.

VD:

var sym = Symbol();
console.log(typeof sym);
//symbol
if(typeof sym == 'symbol') {
    console.log("sym là symbol");
}

2, Các Ví dụ.

-Sau khi đã tìm hiểu xong về lý thuyết, bây giờ mình sẽ làm 1 số các ví dụ sau đó các bạn xem qua và tự ngẫm nhé!

VD: Đối với object.

var key1 = Symbol();
var key2 = Symbol();
var obj = {};
obj[key1] = "Vũ Thanh Tài";
obj[key2] = "Toidicode.com";
console.log(obj);
//{Symbol(): "Vũ Thanh Tài", Symbol(): "Toidicode.com"}
console.log(JSON.stringify(obj));
//{}
console.log(Object.getOwnPropertyNames(obj));
// []
console.log(Object.getOwnPropertySymbols(obj));
//[Symbol(), Symbol()]
console.log(obj[key1]);
//Vũ Thanh Tài
console.log(obj[key2]);
//Toidicode.com

VD: Thủ thuật làm cho các Symbol có thể bằng nhau.

const syma = Symbol.for("sym");
const symb = Symbol.for("sym");
console.log(syma === symb);
//true

const sym1 = Symbol.for("sym1");
const sym2 = Symbol.for("sym2");

console.log(Symbol.keyFor(sym1) == "sym1");
//true
console.log(Symbol.keyFor(sym2) == "sym2");
//true

3, Lời kết.

Phần này mình chỉ khái quát qua cho mọi người biết thôi, vì trên thực tế mình thấy nó cũng không có ưu điểm mấy... :D

Nguồn: Toidicode.com

Thông tin tác giả

Thanh Tai (thanhtaivtt)

Thanh Tai (thanhtaivtt)

The best way to learn is to teach

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia