Панель JavaScript «не удается прочесть свойство» для неопределенного значения [дубликат]

28
задан ROMANIA_engineer 19 December 2018 в 11:16
поделиться

2 ответа

Если свойство объекта может ссылаться на какой-то другой объект, то вы можете проверить , что для undefined, прежде чем пытаться использовать его свойства:

if (thing && thing.foo)
   alert(thing.foo.bar);

Я мог бы обновить свой ответ, чтобы лучше отразить Ваша ситуация, если вы показываете какой-то реальный код, но, возможно, что-то вроде этого:

function someFunc(parameterName) {
   if (parameterName && parameterName.foo)
       alert(parameterName.foo.bar);
}
39
ответ дан 28 November 2019 в 02:55
поделиться

Вы можете защитить себя любым из этих двух способов:

function myFunc(thing) {
    if (thing && thing.foo && thing.foo.bar) {
        // safe to use thing.foo.bar here
    }
}

function myFunc(thing) {
    try {
        var x = thing.foo.bar;
        // do something with x
    } catch(e) {
        // do whatever you want when thing.foo.bar didn't work
    }
}

В первом примере вы явно проверяете все возможные элементы переменной, на которую ссылаетесь, чтобы убедиться, что она безопасна перед ее использованием, вы не получите никаких незапланированных исключений.

Во втором примере вы просто помещаете обработчик исключений вокруг него. Вы просто получаете доступ к thing.foo.bar, если он существует. Если он существует, то код работает нормально. Если он не существует, он выдаст исключение, которое вы поймаете и проигнорируете. Конечный результат такой же. Если существует thing.foo.bar, ваш код, использующий его, выполняется. Если он не существует, этот код не выполняется. Во всех случаях функция работает нормально.

Оператор if выполняется быстрее. Исключение может быть проще для программирования и использования в сложных случаях, когда может быть много возможных способов защиты, и ваш код структурирован таким образом, что генерирование исключения и его обработка - это чистый способ пропустить выполнение, когда некоторый фрагмент данных не существует , Исключения немного медленнее, когда выдается исключение.

8
ответ дан 28 November 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: