2024-05-06 20:40:05 +00:00
|
|
|
---
|
2024-10-29 18:27:12 +00:00
|
|
|
date: 2020-11-13
|
2024-05-06 20:40:05 +00:00
|
|
|
id: 1e9f826e-69c6-4a52-8cf8-135abc082fb3
|
|
|
|
title: JavaScript Symbols
|
|
|
|
---
|
|
|
|
|
|
|
|
- [JavaScript Symbol Prototype
|
|
|
|
Methods](20201116101443-javascript_symbol_prototype_methods)
|
|
|
|
|
|
|
|
# Description
|
|
|
|
|
|
|
|
These are tokens that serve as unique IDs. You create symbols via the
|
|
|
|
factory function `Symbol()` (which is loosely similar to
|
|
|
|
[string](20200922164551-strings) returning strings if called as a
|
|
|
|
function).
|
|
|
|
|
|
|
|
# Syntax
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const symbol1 = Symbol();
|
|
|
|
```
|
|
|
|
|
|
|
|
## Add a description
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const tralala = Symbol('tralala')
|
|
|
|
console.log(tralala) // Symbol(tralala)
|
|
|
|
```
|
|
|
|
|
|
|
|
## Convert to string
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const tralala = Symbol('tralala')
|
|
|
|
console.log(String(tralala)) // `Symbol(tralala)`
|
|
|
|
```
|
|
|
|
|
|
|
|
## Every Symbol is unique
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
console.log(Symbol() === Symbol()) // false
|
|
|
|
```
|
|
|
|
|
|
|
|
## Property keys
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const KEY = Symbol();
|
|
|
|
const obj = {};
|
|
|
|
|
|
|
|
obj[KEY] = 123;
|
|
|
|
console.log(obj[KEY]); // 123
|
|
|
|
```
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const FOO = Symbol();
|
|
|
|
const obj = {
|
|
|
|
[FOO]() {
|
|
|
|
return 'bar';
|
|
|
|
}
|
|
|
|
};
|
|
|
|
console.log(obj[FOO]()); // bar
|
|
|
|
```
|
|
|
|
|
|
|
|
# Use as reserved inherited method names
|
|
|
|
|
|
|
|
If for some bizarre reason you want to use reserved inherited method
|
|
|
|
names yourself (like toString) you can with Symbols.
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const toStringSymbol = Symbol("toString");
|
|
|
|
Array.prototype[toStringSymbol] = function() {
|
|
|
|
return `${this.length} cm of blue yarn`;
|
|
|
|
};
|
|
|
|
|
|
|
|
console.log([1, 2].toString()); //1, 2
|
|
|
|
console.log([1, 2][toStringSymbol]()); // 2 cm of blue yarn
|
|
|
|
```
|
|
|
|
|
|
|
|
# Expressions
|
|
|
|
|
|
|
|
Symbols can also be used in [object](20200826201605-objects) expressions
|
|
|
|
and [classes](20201008090316-class_notation).
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
const toStringSymbol = Symbol("toString");
|
|
|
|
|
|
|
|
let stringObject = {
|
|
|
|
[toStringSymbol]() {
|
|
|
|
return "a jute rope";
|
|
|
|
},
|
|
|
|
};
|
|
|
|
console.log(stringObject[toStringSymbol]()); // a jute rope
|
|
|
|
```
|