How to delete/unset the properties of a javascript object?
Possible Duplicates:
How to unset a Javascript variable?
How to remove a property from a javascript object
我正在寻找一种方法来删除/取消设置JS对象的属性,这样当我循环通过执行for (var i in myObject)的对象时,它们就不会再出现了。这是怎么做到的?
- 你有没有为自己做过调查?当我搜索"javascript删除对象属性"时,这是第一个结果:如何从javascript对象中删除属性
- 尊重网站的规则如何?从FAQ:"请四处看看你的问题是否已经被问及(甚至可能回答)!)在你问之前。"
- 这不是规定。
- @点击投票:是的!
只需使用delete,但请注意,您应该充分阅读使用此选项的效果:
1 2
| delete object.index; //true
object.index; //undefined |
但如果我这样使用:
1 2 3
| var x = 1; //1
delete x; //false
x; //1 |
但是,如果您确实希望删除全局命名空间中的变量,那么可以使用它的全局对象,如window,或者在最外部的作用域中使用this,即
1 2 3 4
| var a = 'b';
delete a; //false
delete window.a; //true
delete this.a; //true |
http://perfectionkills.com/understanding-delete/
另一个事实是,在数组上使用delete不会删除索引,但只会将值设置为undefined,这意味着在某些控制结构(如for循环)中,您仍将迭代该实体,当涉及数组时,您应该使用splice,这是数组对象的原型。
示例数组:
1 2 3 4
| var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW"; |
如果我要这样做:
得到的数组将是:
1
| ["Saab", undefined,"BMW"] |
但是像这样使用拼接:
会导致:
- tl;dr我们是否可以删除windows["myvar"]?
- 简单的答案是,你可以,你可以:var x = 1;,然后是delete window.x;
- @罗伯特-谢谢。我是这样认为的。不需要删除任何内容
- 所以如果我这样做了:delete foo[bar],然后我通过for (var i in foo) {}循环通过foo,在循环期间我将不再遇到bar?
- 只要在对象{}而不是数组[]上使用delete,如果使用的是数组,则会执行Data.splice(index,1)以完全删除它。
- 更新了我的答案,通知你这件事。
- "您可以使用它的全局对象,如window,或者在最外部的作用域中使用它,即"和"简单的答案是可以的,您可以这样做:var x=1;然后删除window.x;"不,您不能这样做。如果一个全局是用var声明的,它不能被删除,即使是用delete window.varname也不能删除。示例:jsbin.com/ojuyig,但是如果您没有使用var(如果您只是通过分配给它来创建全局,例如window.varname = 42,则可以删除它。但是,var创建了一个绑定到全局对象(浏览器中的window的环境)的环境,这些环境不能被删除。
- @删除对"var"创建的变量没有影响,所以第三个示例不正确。参见[开发人员.Mozilla .org/EN美国/DOCS/Web/JavaScript /参考/ /Helip;
- 一个"位"很晚,但如果其他人找到这个答案:我发现RobertPitt的声明,"删除"数组元素不删除索引是错误的。Delphi确实删除了索引,它不再出现在"in"中,也不再出现在"数组中的索引"中。之后数组在该索引处有一个"孔"。实际上,拼接是一个不会删除索引的元素,因为它会对后面的元素重新编号以填充该孔(除非您要拼接掉数组的最后一个元素)。
- 这个答案中有太多不正确的陈述让我头晕…
空白:
删除它:
1
| delete myObject["myVar"] |
正如你在重复答案中看到的那样
- myObject["myVar"]=null;不会删除索引,只是将值设置为空,它仍然存在!
- 因此删除