Symbols Syntax let obj = { [Symbol('foo')]: 'hello!', }; class Obj { [Symbol('foo')]() { // ... } } Symbol(), Symbol.*, Symbol.for() Symbol('iterator') !== Symbol.iterator; Symbol('iterator') !== Symbol('iterator'); Symbol.for('iterator') === Symbol.for('iterator'); Object.keys() let obj = { [Symbol('foo')]: 1, bar: 2 }; Object.keys(obj); // ['bar'] (no symbols) Object.getOwnPropertySymbols() let obj = { [Symbol('foo')]: 'hello!' }; let symbols = Object.getOwnPropertySymbols(obj); // [Symbol(foo)] console.log(obj[symbols[0]]); // logs: 'hello!' Protocols class Graph { constructor() { this.nodes = new Map(); } // ... [Symbol.iterator]() { return this.nodes.entries(); } } let graph = new Graph(); // ... for (let [node, lines] of graph) { // ... }