-Object properties can be own (the property is on the object itself) or inherited (not on the object itself, on one of its prototypes).
-Object properties can be enumerable or non-enumerable. Non-enumerable properties are left out of lots of property enumerations/arrays.
-Property names can be strings or Symbols. Properties whose names are Symbols are left out of lots of property enumerations/arrays.
-Here in 2018, your options for looping through an object's properties are (some examples follow the list):
- for-in [MDN, spec] — A loop structure that loops through the names of an object's enumerable properties, including inherited ones, whose names are strings