Delete
delete
操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
const obj = {
name: 'czm',
age: 18
};
console.log(obj.name); // "czm"
delete obj.name;
console.log(obj.name); // undefined
对于所有情况都是true
,除非属性是一个自身的
不可配置
的属性,在这种情况下,非严格模式返回 false
。
异常的情况
在严格模式下,如果是属性是一个自己不可配置的属性,会抛出TypeError
。
Delete移除规则
**delete
**操作符会从某个对象上移除指定属性。成功删除的时候会返回 true
,否则返回 false
。
注意:
- 如果你试图 删除的属性不存在,那么delete将 不会起任何作用,但仍会 返回true
- 如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性。也就是说,delete操作只会在自身的属性上起作用
- 任何使用
var
声明的属性不能从全局作用域或函数的作用域中删除。- delete操作 不能删除任何 在全局作用域中的 函数,无论这个函数是来自于函数声明或函数表达式
- 除了在全局作用域中的函数不能被删除,在对象中的函数是能够用delete操作删除的。
- 任何用
let
或const
声明的属性不能够从它被声明的作用域中删除。 - 不可设置的(Non-configurable)属性不能被移除。这意味着像
Math
,Array
,Object
内置对象的属性以及使用Object.defineProperty()
方法设置为不可设置的属性不能被删除。 - delete 对局部变量名不起作用
var obj = {
age: 28,
name: 'czm',
}
console.log(delete obj.name); // true
console.log(delete obj.age); // true
// 当试着删除一个不存在的属性时
// 同样会返回true
console.log(delete obj.salary); // true