如何从JavaScript对象中删除一个属性?
假设我创建了一个对象,如下所示。
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
怎样才能删除属性regex
,最终得到如下的新myObject
?
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI"
};
5780
3
像这样。
演示
对于任何有兴趣阅读更多相关内容的人来说,Stack Overflow用户kangax在他们的博客上写了一篇关于
delete
语句的令人难以置信的深度博文,了解删除。强烈推荐。这在Firefox和Internet Explorer中有效,我想在其他所有的浏览器中也有效。
2018-07-21更新:长期以来,我对这个答案感到很尴尬,所以我认为现在是时候把它润色一下了。只是做了一点评论、澄清和格式化,以帮助加快阅读这个答案中不必要的冗长和曲折的部分。
#简短的版本 #问题的实际答案 正如其他人所说,你可以使用`删除'。
阵列等同于
不要从一个数组中
删除'。使用
Array.prototype.splice`代替。# 长篇大论 JavaScript是一种OOP语言,所以所有东西都是一个对象,包括*数组。因此,我觉得有必要指出一个特别的注意点。 在数组中,与普通的对象不同,使用 "delete "会留下 "null "形式的垃圾,在数组中形成一个 "洞"。
正如你所看到的,
delete
并不总是像人们所期望的那样工作。值被覆盖了,但是内存没有被重新分配。也就是说,array[4]
并没有被重新定位到array[3]
。这与Array.prototype.unshift
相反,它在数组的开头插入一个元素,并将所有的元素向上移动(array[0]
变成array[1]
,等等)。 说实话,除了设置为 "空 "而不是 "未定义 "外--这很奇怪--这种行为应该不会令人惊讶,因为 "删除 "是一个单数运算符,就像 "typeof "一样,是硬性规定的语言,不应该关心它所使用的对象的类型,而 "Array "是 "Object "的一个子类,其方法专门为处理数组而设计。因此,`delete'没有很好的理由为重移数组而设计一个特殊的案例,因为这只会让事情变得更慢,而没有必要的工作。现在回想起来,我的期望是不现实的。 当然,这**让我吃惊。因为我写这个是为了证明我对"null garbage"的讨伐。就这样,你已经让PDP-11先生满意了。万岁!(虽然我还是会告诉他...)