javascript循环和删除对象属性

fre*_*hie 21 javascript

我有一个具有各种属性的对象.对象的名称是全局变量,但属性在运行时通过方法更改.某些方法会向对象添加属性.我想添加一个循环遍历此对象的方法,并删除所有null或空属性.我可以通过指定其名称并检查其状态来检查每个属性,但如果我稍后添加属性,我也必须更新此清理方法.如何在不知道属性名称的情况下遍历对象的属性.

谢谢你的建议.

Zir*_*rak 25

对对象的迭代很简单 - for in循环:

for (var key in object) {
    if (object.hasOwnProperty(key)) {
        //Now, object[key] is the current value
        if (object[key] === null || isEmpty(object[key]))
            delete object[key];
    }
}
Run Code Online (Sandbox Code Playgroud)

isEmpty 不存在,你必须定义它或用更有意义的东西替换它,我无法理解你的问题中你的意思是什么.

我用object.hasOwnProperty,因为对象继承的东西Object.prototype和其他可能的地方(例如数组继承Array.prototype,从继承Object.prototype).所以:

object.toString; //function toString() { [native code] }
Run Code Online (Sandbox Code Playgroud)

但是,object.toString实际上指的是Object.prototype.toString- 它实际上并不在你的对象中,但是当你输入时object.toString,解释器会看到没有object.toString,所以它会检查原型链直到它找到它.

hasOwnProperty 检查对象上是否确实存在一个键:

object.hasOwnProperty("toString"); //false
object.foo = "bar";
object.hasOwnProperty("foo"); //true
Run Code Online (Sandbox Code Playgroud)

对对象的下标访问也很简单:

var object = {foo: "bar"};
object.foo; //"bar"
object["foo"]; //"bar"

var key = "foo";
object[key]; //"bar"
Run Code Online (Sandbox Code Playgroud)

请注意,传递给括号的任何内容都会转换为字符串.因此,例如,您可以这样做:

object[Object.prototype.toString] = "magic";

Object.keys(object); //["function toString() { [native code] }"]
Run Code Online (Sandbox Code Playgroud)

如果你想知道,Object.keys是一个ES5(EcmaScript 5)功能.

  • 所以我们也可以使用[Object.keys](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)来迭代对象自己的属性,对吧?像`Object.keys(myObj).forEach(function(ownKey){delete myObj [ownKey]});; (2认同)