Symbol

Note

ECMAScript6

// символы не видимы для циклов
let s = Symbol('my_symbol');
let o = {};
o[s] = 's'
Object.keys(o);
// []

o.s
// error

o[s]
// 's'
Symbol('1') == Symbol('1')
// false

Symbol.for('1') == Symbol.for('1')
// true
class Symbol()
var s = Symbol();
typeof s;
// 'symbol'
try {
    let s = new Symbol();
} catch (e) {
    // Symbol is not a constructor
}
Symbol.hasInstance
Symbol.isContcatSpreadable
Symbol.iterator

Символ для реализации интерфейса итератора

class Users {
    constructor(users) {
        this.users = users;
    }

    [Symbol.iterator]() {
        let i = 0;
        let users = this.users;
        return {
            next() {
                if (i < users.length) {
                    return {
                        done: false,
                        value: users[i++],
                    };
                }
                return {
                    done: true,
                }
            }
        }
    }
}

let users = Users([...])

users_iterator = users[Symbol.iterator];
users_iterator.next();

for (let user of users) {
    ...
}

[...users]
// [...]
Symbol.match
Symbol.prototype
Symbol.replace
Symbol.search

Символ для реализации интерфейса поиска

class Product {

    constructor(type) {
        this.type = type;
    }

    [Symbol.search](string) {
        return string.indexOf(this.type) >= 0 ? 'FOUND': 'NOT_FOUND'
    }

}

let pr = Product('soap');

pr[Symbol.search]('barsoap');
// FOUND

'barsoap'.search(pr);
// FOUND

'shampoo'.search(pr);
// NOT_FOUND
Symbol.species
Symbol.split
Symbol.toPrimitive
Symbol.toStringTag
Symbol.unscopables
for(string)

Создает символ глобально

Note

ECMAScript6