Simbol adalah tambahan terbaru pada Javascript dan hanya digunakan sejak diperkenalkannya ES6. Karena simbol dimasukkan pada tahap akhir permainan, simbol tersebut memiliki tujuan yang cukup spesifik dalam Javascript. Simbol tersebut tidak seperti simbol yang Anda ketahui dari Ruby; nyatanya, keduanya tidak terlihat sama. Ini adalah sintaks untuk membuat simbol Javascript:

Symbol()
// typically there is some kind of description in the parentheses
// to help distinguish multiple Symbols when debugging
// e.g. Symbol("description")

Simbol juga berfungsi sangat berbeda dalam Javascript dibandingkan dengan Ruby. Di Ruby, simbol digunakan sebagai label atau nama unik, dan paling sering digunakan sebagai kunci dalam hash.

Dalam Javascript, simbol adalah entitas unik tersendiri. Dua karakteristik simbol Javascript yang paling menonjol adalah:

  • Simbol benar-benar unik
  • Simbol diperlakukan terpisah dari data primitif, sehingga menjamin privasi pada tingkat tertentu

Sehubungan dengan poin pertama, simbol selalu unik, bahkan ketika dua simbol memiliki deskripsi yang sama persis.

Symbol('foo') === Symbol('foo')
// false 

Sehubungan dengan poin kedua, simbol diperlakukan secara terpisah dari data primitif dan tidak dapat diakses melalui iterator umum seperti for atau forEach loop atau melalui metode seperti Object.keys

const myObj = {}
myObj['a'] = 'b'
myObj[Symbol('a')] = 'b'
Object.keys(myObj)
// ['a']

Namun, simbol tidak sepenuhnya bersifat pribadi, karena dapat diakses menggunakan metode bawaan yang unik untuk simbol, seperti:

Object.getOwnPropertySymbols(myObj)
// [Symbol('a')]

Jadi sebaiknya Anda tidak bergantung pada simbol jika ingin data Anda benar-benar pribadi. Dengan mengingat hal tersebut, apa kegunaan simbol Javascript? Ya… karena simbol masih relatif baru, kegunaannya secara keseluruhan masih diperdebatkan. Beberapa kegunaan potensial adalah:

  • Pengorganisasian data internal vs data publik

Karena simbol tidak dapat diakses melalui cara biasa, simbol tersebut diperlakukan terpisah dari tipe data primitif. Artinya, Anda dapat, misalnya, membuat objek dengan kunci semi-tersembunyi. Kunci ini dapat digunakan untuk menyimpan data internal yang tidak boleh dioperasikan melalui metode konvensional.

  • Menciptakan nilai unik pada objek

Anda juga dapat menggunakan simbol sebagai pengganti string atau bilangan bulat pada nilai objek. Keith Cirkel memberikan contoh perpustakaan logging dengan simbol sebagai nilai objek:

log.levels = {
    DEBUG: Symbol('debug'),
    INFO: Symbol('info'),
    WARN: Symbol('warn'),
};
log(log.levels.DEBUG, 'debug message');
log(log.levels.INFO, 'info message');

Hal terakhir yang sangat penting tentang simbol Javascript adalah konstanta atau “simbol terkenal” … tapi itu topik untuk lain waktu. :)

Sumber daya: