Iterating over object properties:

    // Thing                                 own/inherited?            enumerable?            string/symbol-keyed?          return type                                   notes
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
    Object.keys()                         // own,                  enumerable,             string-keyed               string[]
    Object.getOwnPropertyNames()          // own,                  enumerable OR not,      string-keyed               string[]
    Object.getOwnPropertySymbols()        // own,                  enumerable OR not,                 symbol-keyed    Symbol[]
    Reflect.ownKeys()                     // own,                  enumerable OR not,      string-keyed               (string|Symbol)[]                    equivalent to concatenating the above two
    Object.getOwnPropertyDescriptors()    // own,                  enumerable OR not,      string- or symbol-keyed    {identifier1: description, ...}
    for...in                              // own AND inherited,    enumerable,             string-keyed               n/a