【问题标题】:How can I delete/unset the properties of a JavaScript object? [duplicate]如何删除/取消设置 JavaScript 对象的属性? [复制]
【发布时间】:2011-09-23 00:42:36
【问题描述】:

可能的重复:
How can I unset a JavaScript variable?
How do I remove a property from a JavaScript object?

我正在寻找一种方法来删除/取消设置 JavaScript 对象的属性,因此如果我循环执行 for (var i in myObject) 的对象,它们将不再出现。如何做到这一点?

【问题讨论】:

  • 您是否尝试过自己研究?当我搜索 "javascript delete object properties" 时,这是第一个结果:How to remove a property from a javascript object
  • 尊重网站规则怎么样? From the faq: “在你提问之前,请四处看看你的问题是否已经被问过(甚至可能已经回答了!)。”

标签: javascript jquery


【解决方案1】:

只需使用delete,但请注意,您应该充分阅读使用此功能的效果:

 delete object.index; //true
 object.index; //undefined

但如果我这样使用:

var x = 1; //1
delete x; //false
x; //1

但如果你确实想删除全局命名空间中的变量,你可以使用它的全局对象如window,或者在最外层的范围内使用this,即,

var a = 'b';
delete a; //false
delete window.a; //true
delete this.a; //true

Understanding delete

另一个事实是,在数组上使用 delete 不会删除索引,而只会将值设置为 undefined,这意味着在某些控制结构(例如 for 循环)中,您仍然会遍历该实体。当涉及到数组时,您应该使用splice,它是数组对象的原型。

示例数组:

var myCars = new Array();
myCars[0] = "Saab";
myCars[1] = "Volvo";
myCars[2] = "BMW";

如果我这样做:

delete myCars[1];

结果数组将是:

["Saab", undefined, "BMW"]

但是像拼接一样使用

myCars.splice(1,1);

会导致:

["Saab", "BMW"]

【讨论】:

  • tl;dr 我们可以删除 windows["myVar"] 吗?
  • 简单的答案是可以,你可以这样做:var x = 1; 然后delete window.x;
  • "你可以使用它的全局对象,比如窗口,或者在最外层的范围内使用它,即""简单的答案是可以,你可以do: var x = 1; 然后删除 window.x; " 不,你不能。如果使用var 声明全局,则无法删除它,即使使用delete window.varname 也是如此。示例:jsbin.com/ojuyig 而如果你没有使用var(如果你只是通过分配给它来创建全局,例如window.varname = 42),你可以删除它。但是var 在全局对象(window,在浏览器中)上创建了一个环境绑定,并且无法删除。
  • @RobertPitt,删除对“var”创建的变量没有影响,所以你的第三个例子不正确。见 [developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 晚了“一点”,但万一其他人找到了这个答案:我发现 RobertPitt 的声明,即数组元素上的“删除”不会删除错误的索引。 delete does 删除索引——它不再出现在“for-in”或“index-in-array”中。之后,该数组在该索引处有一个“洞”。实际上,splice 是不删除索引的那个,因为它会重新编号后续元素以填充孔(除非您要拼接掉数组的最后一个元素)。
【解决方案2】:

空白:

myObject["myVar"]=null;

删除它:

delete myObject["myVar"]

你可以在重复的答案中看到

【讨论】:

  • myObject["myVar"]=null;,不会删除索引,它只是将值设置为null,它仍然存在!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2019-08-27
  • 2014-05-02
  • 2019-07-20
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多