如何从 JavaScript 对象中删除属性?

2022-08-29 21:45:11

给定一个对象:

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI",
  "regex": "^http://.*"
};

如何删除该属性以结束以下内容?regexmyObject

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI"
};

答案 1

要从对象中删除属性(改变对象),可以按如下方式操作:

delete myObject.regex;
// or,
delete myObject['regex'];
// or,
var prop = "regex";
delete myObject[prop];

演示

var myObject = {
    "ircEvent": "PRIVMSG",
    "method": "newURI",
    "regex": "^http://.*"
};
delete myObject.regex;

console.log(myObject);

对于任何有兴趣阅读更多相关信息的人,Stack Overflow用户kangax在他们的博客上写了一篇关于该声明的非常深入的博客文章,理解删除。强烈推荐。delete

如果您想要一个包含原始键(某些键除外)的新对象,则可以使用解构

演示

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI",
  "regex": "^http://.*"
};

// assign the key regex to the variable _ indicating it will be unused
const {regex: _, ...newObj} = myObject;

console.log(newObj);   // has no 'regex' key
console.log(myObject); // remains unchanged

答案 2

JavaScript 中的对象可以被认为是键和值之间的映射。该运算符用于一次删除一个键(通常称为对象属性)。delete

var obj = {
  myProperty: 1    
}
console.log(obj.hasOwnProperty('myProperty')) // true
delete obj.myProperty
console.log(obj.hasOwnProperty('myProperty')) // false

运算符不直接释放内存,它与简单地将属性的值或分配给属性不同,因为属性本身已从对象中删除。请注意,如果已删除属性的值是引用类型(对象),并且程序的另一部分仍包含对该对象的引用,则当然,在对该对象的所有引用都消失之前,不会对该对象进行垃圾回收。deletenullundefined

delete将只适用于其描述符将其标记为可配置的属性。