Есть как минимум три способа сделать это; какой из них вы используете, в значительной степени зависит от вас, а иногда даже от стиля, хотя есть некоторые существенные различия:
if..in
Вы можете использовать if..in
:
if ("_test" in config.UI.opacity)
... потому что при использовании в тесте (в отличие от специального цикла for..in
), in
проверяет, имеет ли объект или его прототип (или прототип его прототипа и т. Д.) То свойство имя.
hasOwnProperty
Если вы хотите исключить свойства из прототипов (это не имеет большого значения в вашем примере), вы можете использовать hasOwnProperty
, который является функцией, которую все объекты наследуют от Object.prototype
:
if (config.UI.opacity.hasOwnProperty("_test"))
Просто найдите его и проверьте результат
Наконец, вы можете просто получить свойство (даже если оно не существует) и решить, что делать с результатом, посмотрев на результат; если вы спросите у объекта значение свойства, которого у него нет, вы получите обратно undefined
:
var c = config.UI.opacity._test;
if (c) {
// It's there and has a value other than undefined, "", 0, false, or null
}
или
var c = config.UI.opacity._test;
if (typeof c !== "undefined") {
// It's there and has a value other than undefined
}
Быть оборонительным
Если возможно, что config.UI
вообще не будет иметь свойства opacity
, вы можете сделать все это более оборонительным:
// The if..in version:
if (config.UI.opacity && "_test" in config.UI.opacity)
// The hasOwnProperty version
if (config.UI.opacity && config.UI.opacity.hasOwnProperty("_test"))
// The "just get it and then deal with the result" version:
var c = config.UI.opacity && config.UI.opacity._test;
if (c) { // Or if (typeof c !== "undefined") {
Последний работает, потому что оператор &&
особенно мощен в JavaScript по сравнению с некоторыми другими языками; это следствие необычайно мощного ||
оператора .