Hint
Every property has a descriptor controlling whether it can be changed, seen, or deleted
Every object property has a descriptor with 3 flags:
for...in / Object.keys()?const obj = {};
Object.defineProperty(obj, 'ID', {
value: 42,
writable: false, // read-only
enumerable: false, // hidden from loops
configurable: false // can't redefine or delete
});
obj.ID = 99; // silently fails (TypeError in strict)
console.log(obj.ID); // 42
Object.keys(obj); // [] β ID is non-enumerable
delete obj.ID; // false β non-configurable
// View a property's descriptor
Object.getOwnPropertyDescriptor(obj, 'ID');
// { value: 42, writable: false, enumerable: false, configurable: false }
// Regular property defaults:
// { value: ..., writable: true, enumerable: true, configurable: true }