Вы можете защитить себя любой из этих двух способов:
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
выполняется быстрее. Исключением может быть проще кодировать и использовать в сложных случаях, когда может быть много возможных вещей для защиты и ваш код структурирован так, что бросать исключение и обрабатывать его - это чистый способ пропустить выполнение, когда некоторая часть данных не существует , Исключения немного медленнее, когда выбрано исключение.
Я думаю, что я понимаю, но не совсем ... Можете ли вы опубликовать свой код? –