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
        
back