javascript循环和删除对象属性

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

感谢您的建议。


迭代一个对象很简单 - 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];
    }
}

isEmpty不存在,你必须定义它或用更有意义的东西来替代它,我不明白你的问题中空的意思。

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

object.toString; //function toString() { [native code] }

但是, object.toString实际上是指Object.prototype.toString - 它不是真的在你的对象中,但是当你输入object.toString ,解释器认为没有object.toString ,所以它检查原型链直到它发现它。

hasOwnProperty检查对象上是否存在键实际存在:

object.hasOwnProperty("toString"); //false
object.foo = "bar";
object.hasOwnProperty("foo"); //true

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

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

var key = "foo";
object[key]; //"bar"

请注意,传递给括号的内容会被转换为字符串。 所以,例如,你可以这样做:

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

Object.keys(object); //["function toString() { [native code] }"]

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


您可以使用for循环遍历对象属性。

for ( var i in obj ) {
    if ( obj[i] === null ) {
        delete obj[i];
    }
}
链接地址: http://www.djcxy.com/p/27373.html

上一篇: javascript looping and deleting object properties

下一篇: How to list the functions/methods of a javascript object? (Is it even possible?)