检查对象的所有属性是否为未定义。

3

我正在尝试逐个检查对象的属性,以确保没有未定义的属性。我发现了这个问题这个问题,并实现了以下代码,但它不起作用。

for (var property in p.properties) {
    if (p.properties.hasOwnProperty(property)) {
        if (typeof property == 'undefined') {
            p.properties[property] = '';
            //a breakpoint here will NOT be hit
        }
    }
}

然而,如果我明确检查其中一个我知道具有未定义值的元素,它就可以正常工作:
if(typeof p.properties.st == 'undefined') {
    p.properties.st = '';
    //a breakpoint here WILL be hit
}

以下是数据获取的方式:
$.getJSON("data/stuff.json", function (data) {
    $.each(data.features, function (i, p) {
       //checking for undefined properties here
    }
});

你正在检查它是否为字符串'undefined'。去掉引号:undefined - mcranston18
我不认为那是正确的… - user736893
@mcranston18 typeof 总是返回一个字符串。 - Barmar
@Barmar 我的错误。应该更仔细地阅读代码。 - mcranston18
1个回答

4

应该是:

if (typeof p.properties[property] == 'undefined')

您正在测试属性name是否未定义,这是不可能的;您想要测试value是否未定义。

尝试执行p.properties.st.toLowerCase()时,我仍然收到“无法读取未定义的属性'toLowerCase'”的错误提示。 - user736893
我认为JSON永远不会创建具有未定义值的属性。该属性可能根本不存在。 - Barmar
那么为什么第二份代码可以解决问题,而第一份代码(在我的原始帖子中)却不能呢? - user736893
区别在于,在for循环中永远不会测试不存在的属性,因为它是从对象本身获取属性名称列表。你需要的是一个包含所有应该存在的属性名称的数组。 - Barmar
啊,那就说得通了。我可能需要创建一个新问题。 - user736893

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接