Известные символы — это предопределённые константы Symbol, встроенные в JavaScript, которые позволяют разработчикам переопределять или кастомизировать поведение ядра языка на собственных объектах.
Symbol.iterator — определяет, как объект итерируется (например, в циклах for...of или spread-синтаксисе)Symbol.toPrimitive — управляет тем, как объект преобразуется в примитивное значение (число, строка или значение по умолчанию)Symbol.toStringTag — кастомизирует результат вызова Object.prototype.toString() на объектеSymbol.hasInstance — переопределяет поведение оператора instanceofclass MyCollection {
constructor(...items) { this.items = items; }
[Symbol.iterator]() {
let index = 0;
return {
next: () => index < this.items.length
? { value: this.items[index++], done: false }
: { done: true }
};
}
[Symbol.toPrimitive](hint) {
return hint === 'number' ? this.items.length : this.items.join(', ');
}
get [Symbol.toStringTag]() { return 'MyCollection'; }
}
const col = new MyCollection(1, 2, 3);
console.log([...col]); // [1, 2, 3]
console.log(`${col}`); // "1, 2, 3"
console.log(Object.prototype.toString.call(col)); // "[object MyCollection]"
Известные символы работают как хуки расширения прямо в движок JavaScript. В отличие от обычных свойств, они неперечисляемы и защищены от коллизий, что делает их предпочтительным способом органично интегрировать собственные объекты со встроенными возможностями языка.
Well-known Symbols являются неперечислимыми и защищены от коллизий, что делает их подходящими для кастомизации встроенного поведения языка без вмешательства в обычное перечисление свойств.
Новый — ещё не проверен сообществом
Вы