如何删除/取消设置javascript对象的属性?

Cli*_*ote 95 javascript jquery

可能重复:
如何取消设置Javascript变量?
如何从javascript对象中删除属性

我正在寻找一种方法来删除/取消设置JS对象的属性,这样如果我循环遍历该对象,它们将不再出现for (var i in myObject).如何才能做到这一点?

Rob*_*itt 110

只是使用delete,但要注意你应该完全阅读使用它的效果:

 delete object.index; //true
 object.index; //undefined
Run Code Online (Sandbox Code Playgroud)

但如果我这样使用:

var x = 1; //1
delete x; //false
x; //1
Run Code Online (Sandbox Code Playgroud)

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

var a = 'b';
delete a; //false
delete window.a; //true
delete this.a; //true
Run Code Online (Sandbox Code Playgroud)

http://perfectionkills.com/understanding-delete/

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

示例数组:

var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW";
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

delete myCars[1];
Run Code Online (Sandbox Code Playgroud)

结果数组将是:

["Saab", undefined, "BMW"]
Run Code Online (Sandbox Code Playgroud)

但是像这样使用拼接:

myCars.splice(1,1);
Run Code Online (Sandbox Code Playgroud)

会导致:

["Saab", "BMW"]
Run Code Online (Sandbox Code Playgroud)

  • tl; dr我们可以删除windows ["myVar"]吗? (5认同)
  • *"你可以使用它的全局对象,例如窗口,或者在最外层范围内使用它,即"*和*",简单的答案是肯定的,你可以这样做:var x = 1;然后删除window.x;"*不,你不能.如果使用`var`声明了global,则无法删除它,甚至不能删除`delete window.varname`.示例:http://jsbin.com/ojuyig如果您*没有*使用`var`(如果您只是通过赋值创建全局,例如,`window.varname = 42`),那么您可以删除.但是`var`在全局对象(浏览器中的`window`)上创建了一个*环境绑定*,并且无法删除它们. (3认同)
  • 简单的答案是可以,您可以这样做:`var x = 1;`,然后`delete window.x`; (2认同)
  • @RobertPitt,删除对“ var”创建的变量没有影响,因此您的第三个示例不正确。参见[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete] (2认同)

mpl*_*jan 12

要删除它:

myObject["myVar"]=null;
Run Code Online (Sandbox Code Playgroud)

要删除它:

delete myObject["myVar"]
Run Code Online (Sandbox Code Playgroud)

你可以看到重复的答案

  • `myObject ["myVar"] = null;`,不会删除索引,它只是将值设置为null,它仍然存在! (6认同)
  • 因此删除 (2认同)