Как проверить, имеет ли объект javascript определенное свойство - PullRequest
4 голосов
/ 02 апреля 2012

Предположим, у меня есть такой объект javascript:

window.config
config.UI = {
        "opacity": {
            "_type": "float",
            "_tag": "input",
            "_value": "1",
            "_aka": "opacity",
            "_isShow":"1"
 }

Как определить, есть ли у объекта "opacity" свойство с именем "_test"?как

var c=config.ui.opacity;
for(var i in c)
{
   //c[i]=="_test"?
}

Как узнать, назначен ли он также?

1 Ответ

14 голосов
/ 02 апреля 2012

Есть как минимум три способа сделать это; какой из них вы используете, в значительной степени зависит от вас, а иногда даже от стиля, хотя есть некоторые существенные различия:

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 по сравнению с некоторыми другими языками; это следствие необычайно мощного || оператора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...