检查 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!');
}
考虑一个对象,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!');
}