javascript循环和删除对象属性

javascript循环和删除对象属性,javascript,Javascript,我有一个具有各种属性的对象。对象的名称是全局变量,但属性在运行时由方法更改。有些方法向对象添加属性。我想添加一个方法,通过该对象循环并删除其所有null或空属性。我可以通过指定每个属性的名称并检查其状态来检查每个属性,但如果以后添加属性,我也必须更新此清理方法。如何在不知道属性名称的情况下循环对象的属性 谢谢您的建议。您可以使用for-each循环来迭代对象属性 for ( var i in obj ) { if ( obj[i] === null ) { delete

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


谢谢您的建议。

您可以使用for-each循环来迭代对象属性

for ( var i in obj ) {
    if ( obj[i] === null ) {
        delete obj[i];
    }
}

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

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.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] }"]

如果您想知道,是ES5(EcmaScript 5)功能。

Dup:在对象上循环很简单,是一个
for In
循环,但空是什么意思?如何确定值是否为空?你的意思是像一个空数组(长度===0)或空对象(没有属性)?所以我们也可以使用它来迭代对象自己的属性,对吗?类似于
Object.keys(myObj.forEach)(函数(ownKey){delete myObj[ownKey]})
object[Object.prototype.toString] = "magic";

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