Symbol — уникальный примитив, часто как ключ свойства, который не столкнётся со строковыми именами, и как крючок протоколов (Symbol.iterator и др.).
const id = Symbol('id');
const user = { [id]: 1, name: 'Ann' };
Object.keys(user); // ['name'] — symbol-ключи не видны
user[id]; // 1
Symbol('x') !== Symbol('x'). Общий реестр: Symbol.for('x'). Это не настоящая приватность: Object.getOwnPropertySymbols / Reflect.ownKeys всё покажут. Для приватности — #fields.
Не вызывайте new Symbol().
Итог
Symbol — уникальные ключи и meta-протоколы языка; скрытость от for...in/JSON, но не security boundary.
На собеседовании
Ожидают не заученную таблицу, а умение связать концепцию с багом из практики: что сломается, если выбрать неправильный вариант, и какой код вы напишете в реальном PR. Короткий пример и граничный случай обычно ценятся выше длинной теории.
Для чего в JavaScript используют `Symbol`? · Sobeso