Почти точно. Подстановка тройного левого результата "if" для использования конкатенации для user.name
должна помочь, поэтому он будет читать это как значение c динамического *, а не как обычный текст.
Вы также можете проверить чтобы убедиться, что свойство name существует у пользователя и имеет непустое значение без пробелов.
Попробуйте следующее:
<%- user?.name && user.name.trim().length ? '<h1>Hello ' + user.name.trim() + '</h1>' : '<h1>Hello Guest</h1>' %>
Вы также можете использовать шаблонные литералы, если хотите это для конкатенации:
<%- user?.name && user.name.trim().length ? `<h1>Hello ${user.name.trim()}</h1>` : '<h1>Hello Guest</h1>' %>
Несколько примечаний:
?.
называется дополнительной цепочкой, что позволяет вам проверить, существует ли свойство в пределах объектная переменная, предотвращая срабатывание любой ошибки, если объект не существует.
Я использую .trim()
здесь, чтобы гарантировать, что значение не только не пустое, но и что он содержит непробельные символы, путем удаления всех начальных и конечных пробелов из строки, если она существует, а затем проверки, чтобы убедиться, что длина строки все еще больше нуля, используя .length
. Нам не нужно проверять .length > 0
, поскольку 0 уже является ложным значением. Если условия оцениваются как истинные, мы также выводим усеченное значение в левом результате троичного.
Возможно, лучше всего, вы можете переместить некоторые из HTML за пределы оператор JS, чтобы код был как можно более кратким:
<h1>Hello <%- user?.name?.trim()?.length ? user.name.trim() : 'Guest' %></h1>