使用delete运算符
delete运算符用于删除对象的一个属性;如果该属性的值是一个对象,并且没有更多对该对象的引用,该属性所持有的对象最终会自动释放。
// 定义一个对象
let obj = {
a: 1,
b: 2,
c: 3
};
// 删除属性 'b'
delete obj.b;
console.log(obj); // 输出: { a: 1, c: 3 }
delete 运算符的返回值
对于大多数情况都是
true;如果属性是一个自身不可配置的属性,在这种情况下,非严格模式返回false。
这里的“自身不可配置”,是指属性描述符 configurable 为 false,此时意味着该属性不可以被删除
// 创建一个对象,其中包含一个不可配置的属性
var obj = Object.defineProperties({}, {
myProp: {
value: 42,
writable: true,
enumerable: true,
configurable: false // 属性不可配置
}
});
// 尝试使用 delete 运算符删除 myProp 属性
var result = delete obj.myProp;
console.log(result); // 在非严格模式下输出 false
console.log(obj.myProp); // 输出 42,属性依然存在
其他方法
使用 Reflect.deleteProperty
Reflect.deleteProperty允许你删除一个对象上的属性。返回一个Boolean值表示该属性是否被成功删除。它几乎与非严格的delete运算符相同
var obj = { a: 1, b: 2 };
console.log(Reflect.deleteProperty(obj, 'a')); // 输出 true
console.log(obj); // 输出 { b: 2 }
解构赋值
通过解构赋值,将想要删除的属性剥离出来
// 创建一个对象
let person = {
name: "Alice",
age: 30,
job: "Engineer"
};
// 使用解构赋值来删除属性
const { age, ...newPerson } = person;
// 输出新对象
console.log(newPerson); // { name: 'Alice', job: 'Engineer' }
使用 Object.keys() 和 reduce()
对属性名进行过滤,把想要删除的属性过滤掉
// 创建一个对象
let person = {
name: "Alice",
age: 30,
job: "Engineer"
};
// 使用 Object.keys() 和 reduce() 来创建新对象
let newPerson = Object.keys(person).reduce((result, key) => {
if (key !== 'age') {
result[key] = person[key];
}
return result;
}, {});
// 输出新对象
console.log(newPerson); // { name: 'Alice', job: 'Engineer' }