Почему при вызове значения объектов из JSON оно должно быть заключено в кавычки и символы плюса?

При первой попытке сделать этот вызов PunkAPI я пытался добавить изображения (URL-адреса - это объект, возвращаемый в JSON) с помощью

append("<img src='beer[i].image_url'/>");

Что не сработало, потому что (с консоли) запрос был сделан к http://projectURL.com/beer[i visible.image_url вместо http: // apiURL / beer [i] .image_url.

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

append("<img src='"+beer[i].image_url+"'/>");

Что хотелось бы знать - это Зачем плюсы и кавычки обязательны. Заранее спасибо!


Полный код ниже


 var request = new XMLHttpRequest();
  
request.open("GET", "https://api.punkapi.com/v2/beers?abv_gt=5"); 
  request.responseType = 'json';
  request.send();
  
  request.onload = function() {    
    var beer = request.response; 

    var i; 
    for(i=0; i<beer.length; i++){ 
      $("#demo").append("<img src='"+beer[i].image_url+"' />");
    }    
  };
  
  
  
  
    <body>
  
  <div id = "demo">
    
  </div>
  
</body>

  
 <script
  src = "https://code.jquery.com/jquery-3.3.1.min.js"
  integrity = "sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8 = "
  crossorigin = "anonymous"></script>

Кстати, правильный способ сделать это - $("#demo").append($("<img>", {src: beer[i].image_url})).

Ry- 09.06.2018 01:11
Поведение ключевого слова "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
1
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что если вы не используете кавычки и плюсы для объединения строки, то JavaScript не узнает, что вы пытаетесь объединить значение переменной, чтобы использовать его как часть конечной строки, и интерпретирует его как простую строку.

Итак, вам нужно объединить переменную следующим образом:

append("<img src='"+beer[i].image_url+"'/>");

Или в es6 вы можете использовать замену переменной, используя строки в кавычках:

let source = beer[i].image_url;
append(`<img src = "${source}" />`);

es6 плохо поддерживается в IE11, и полагаться на него для массового производства немного рискованно, но ваш пример верен

Reflective 09.06.2018 00:38

@Reflective, я знаю, я написал это только как «как сделать в es6».

muecas 09.06.2018 00:40

Ах, спасибо! Был лишь смутно знаком с концепцией конкатенации.

noob 09.06.2018 00:50

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

Reflective 09.06.2018 00:51

Вот почему вокруг @Reflective есть транспайлеры.

baao 09.06.2018 00:55

@Reflective, я думаю, хорошо использовать обе возможности. Я объяснил вопрос, дав правильный ответ, и в качестве примечания я быстро описал, как этого можно достичь в es6. Если мы будем использовать такой устаревший браузер, как IE8, мы никогда не продвинемся вперед. В любом случае я принимаю вашу точку зрения, но не согласен с тем, что не предлагаю другие варианты в качестве части ответа.

muecas 09.06.2018 01:03

Это большая дискуссия, что лучше - написать совместимый код или использовать инструменты для совместимости ... У бота есть преимущества и недостатки в зависимости от проекта.

Reflective 09.06.2018 01:03

@Reflective полностью с этим согласен :-)

muecas 09.06.2018 01:04

В JavaScript нет такой вещи, как привязка переменных внутри строк, заключенных в двойные кавычки. Даже обычно можно было использовать простую переменную, но не выражение, которое вы хотите связать с beer[i].image_url.

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