检查 JS 可选属性是否存在的最有效(或最有风格)的方法?

Most efficient (or most stylistic) way of checking for existence of JS optional attributes?

考虑一个对象,user:

user = {
    profile: {
        first_name: "Arthur",
        last_name:  "Dent"
    },
    planet: "Earth"
}

检查 user.profile.first_name 是否存在的最佳方法是什么?

我通常会使用 (!!user && !!user.profile && !!user.profile.first_name) 但这可能不是最好的方法(尤其是在较长的情况下,其中有更深层次的属性嵌套)。

好奇这通常是怎么做的!

[EDIT] 考虑,为了争论,你需要检查 users.jordan.profile.favorites.color 的存在(故意长而笨拙),你不能在哪里确定任何单个属性的存在(因此可能 users.jordan 存在但 users.jordan.profile 不存在。)

当然,这可能是您的代码中存在更普遍问题的迹象(例如,除非填充所有可能的属性,否则您不应创建对象),但有时,这无济于事。

我会使用 try catch 块:

try { fname = user.profile.first_name } catch(e) { fname = false }
if (fname) ...

您可以使用 in 在 if 语句中检查 属性。

if ('profile' in user) {
    alert('I have a profile!');
}

如果您需要检查嵌套值,请查看 属性:

if ('first_name' in user.profile) {
    alert('I have a first name!');
}

您也可以使用 .hasOwnProperty()

if (user.hasOwnProperty('profile') {
    alert('I have a profile!');
}