Javascript - ошибка обнаружения, если ключ json не существует

Я пытаюсь поймать ошибку, когда определенный ключ не существует в json из API, в данном случае imageLinks.thumbnail.

Это то, что я написал до сих пор, но я все еще получаю TypeError: Cannot read property 'thumbnail' of undefined.

            let cover;
            if (results.imageLinks === undefined){

                let cover = "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";

            } else {
                let cover = results.imageLinks.thumbnail;
            };

Помощь будет высоко оценена.

Ваше здоровье

Это очень мало информации для отладки. Не могли бы вы добавить, что такое results и что оно содержит? и я не понимаю, почему вы используете let cover в 3 разных местах, потому что каждый раз, когда вы это делаете, создается новая переменная, если вы хотите использовать ту же переменную, просто определите ее один раз и используйте.

Shivam Sood 03.03.2019 20:58

Вы уверены, что получаете эту ошибку в этой строке? Где-нибудь еще вы ссылаетесь на это? NB: этот вопрос не имеет ничего общего с получением JSON из API. Вы имеете дело с объектами JavaScript, а не с JSON.

trincot 03.03.2019 21:01

Если results.imageLinks не определено, он никогда не выполнит блок else.

Creative Learner 05.03.2019 06:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 085
3

Ответы 3

Вы можете использовать оператор В

if ('imageLinks' in results)

Использовать имеет собственное свойство ()

(function() {
  let cover;
  const result = {
    imageLinks: {}
  };
  if (!Object.hasOwnProperty.call(result, 'imageLinks')) {
    return;
  }
  if (Object.hasOwnProperty.call(result.imageLinks, 'thumbnail')) {
    cover = results.imageLinks.thumbnail;
  } else {
    cover = "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";
  }
  console.info(cover);
})();

Ваш вопрос кажется немного двусмысленным.
Я постараюсь ответить, основываясь на том, что я понял из вашего кода.
Кажется, у вас есть объект с именем results, который может иметь или не иметь свойство imageLinks.
Поэтому вам нужно поставить галочку «если результаты имеют свойство imageLinks, назначьте обложку для results.imageLinks.thumbnail, иначе назначьте «http://actar.com/wp-content/uploads/2015/12/nocover.jpg»

let cover = results['imageLinks']['thumbnail'] ? results['imageLinks']['thumbnail'] : "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";

Обратите внимание, что чек, который я разместил, является более полным. Это пройдет, только если структура объекта {'results' : 'imageLinks': {'thumbnail' : 'some value'}}
Если вы хотите проверить только «imageLinks», замените результаты ['imageLinks']['thumbnail'] на results['imageLinks']
В JS вы хотите проверить ключ в объекте, который вы можете напрямую написать if (results['imageLinks']).

Другие вопросы по теме