The JavaScript ES6 introduced a new primitive data type called Symbol. 
Symbols are immutable (cannot be changed) and are unique.
Code:
    // two symbols with the same description
    const value1 = Symbol('hello');
    const value2 = Symbol('hello');
    console.log(value1 === value2); // false
Creating Symbol:
Symbol() function is used to create a Symbol.
Code:
    // creating symbol
    const x = Symbol()
    typeof x; // symbol
An optional string can be passed as its description in to Symbol() function:
Code:
    const x = Symbol('hey');
    console.log(x); // Symbol(hey)
Access Symbol Description:
To access the description of a symbol, we use the . operator. 
Code:
    const x = Symbol('hey');
    console.log(x.description); // hey
Using Symbol as Object Key:
You can add symbols as a key in an object using square brackets []. 
Code:
    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}
Symbolic Properties of object are not iterable:
Code;
    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
    age
Mixing Symbol & string of same name in object key:
Code:
    let person = {
    name: "Jack",
    };
    // creating Symbol
    let id = Symbol("id");
    // adding symbol as a key
    person[id] = 12;
    person["id"] = 786;
    console.log(person[id])
    console.log(person['id'])
Output:
    12
    786
Symbol Methods:
There are various methods available with Symbol.
Below is list of common symbol methods.
    1) for():Searches for existing symbols
    2) keyFor():Returns a shared symbol key from the global symbol registry.
    3) toSource():Returns a string containing the source of the Symbol object
    4) toString():Returns a string containing the description of the Symbol
    5) valueOf():Returns the primitive value of the Symbol object.
    Code:
        // get symbol by name
        let sym = Symbol.for('hello');
        let sym1 = Symbol.for('id');
        // get name by symbol
        console.log( Symbol.keyFor(sym) ); // hello
        console.log( Symbol.keyFor(sym1) ); // id
Symbol Properties:
   Here is list of common symbol properties & there description.
    1) asyncIterator:Returns the default AsyncIterator for an object
    2) hasInstance:Determines if a constructor object recognizes an object as 
       its instance
    3) isConcatSpreadable:Indicates if an object should be flattened to its 
       array elements
    4) iterator:Returns the default iterator for an object
    5) match:Matches against a string
    6) matchAll:Returns an iterator that yields matches of the regular 
       expression against a string
    7) replace:Replaces matched substrings of a string
    8) search:Returns the index within a string that matches the regular 
       expression
    9) split:Splits a string at the indices that match a regular expression
    10) species:Creates derived objects
    11) toPrimitive:Converts an object to a primitive value
    12) toStringTag:Gives the default description of an object
    13) description:Returns a string containing the description of the symbol
    Code:
        const x = Symbol('hey');
        // description property
        console.log(x.description); // hey
        const stringArray = ['a', 'b', 'c'];
        const numberArray = [1, 2, 3];
        // isConcatSpreadable property
        numberArray[Symbol.isConcatSpreadable] = false;
        let result = stringArray.concat(numberArray);
        console.log(result); // ["a", "b", "c", [1, 2, 3]]
No comments:
Post a Comment