Non-enumerable properties in JavaScript
It isn’t very common in the wild but JavaScript (as of ES5) does support non-enumerable properties.
That is to say, objects can have properties that don’t show up when you do a for...in loop over the object or use Object.keys() to get an array of property names.
I spent way too long tonight figuring out why a property was not being
included in the JSON.stringify() output because I didn’t remember that this was possible. You see, stringify() works by enumerating the object’s properties.
So it makes sense that non-enumerable properties would be ignored.