What is a symbol property and how does it relate to property descriptors?
Symbol properties are like string properties but with unique keys and normal descriptors: 1) They use Symbol values instead of strings as property keys, 2) They can have the same property descriptors (writable, enumerable, configurable) as string properties, 3) They can be defined and modified with Object.defineProperty(), 4) They can be data properties or accessor properties, 5) They aren't enumerated by for...in loops or Object.keys() (but are visible to Object.getOwnPropertySymbols()), 6) They're useful for adding properties that won't conflict with other properties, 7) They're commonly used for metaprogramming, well-known behaviors, and internal implementations.