Object.defineProperty(Object.prototype, "Incognito", {
get: function() { return 42; },
set: function() { },
configurable: true
});
console.log(({}).Incognito); // 42
({}).Incognito = null;
console.log(({}).Incognito); // 42
// I DO NOT WANT INCOGNITO
delete Object.prototype.Incognito
console.log(({}).Incognito); // undefined
Любое свойство с пустым установщиком (потому что кто-то подумал, , что - хорошая идея) необходимо удалить, если вы хотите от него избавиться.
var hash = {
"FALSE": undefined,
"TRUE": null
}
console.log("TRUE" in hash); // true
console.log("FALSE" in hash); // true
delete hash.FALSE;
console.log("FALSE" in hash); // false
Оператор in
возвращает true
для любого свойства, которое существует независимо от его значения. Если вы хотите, чтобы он возвратил false
, вам нужно delete
свойство.
В обоих этих случаях установка null
или undefined
ничего не делает (потому что у него либо есть установщик, который ничего не делает, либо так работает оператор in
)