Интерполяция строк в JavaScript?
Рассмотрите следующий код:
var age = 3;
console.log("Мне " + age + " года!");
Существует ли способ вставить значение переменной в строку, помимо конкатенации строк?
5 ответ(ов)
Предостережение: избегайте любых систем шаблонов, которые не позволяют экранировать их собственные разделители. Например, вы не сможете вывести следующее с помощью метода supplant()
, упомянутого здесь.
"Мне 3 года благодаря моей переменной ."
Простая интерполяция может подойти для небольших самодостаточных скриптов, но часто имеет этот недостаток в дизайне, который ограничивает серьезное использование. Лично я предпочитаю шаблоны DOM, например:
<div> Мне <span id="age"></span> лет!</div>
И использую манипуляции с jQuery: $('#age').text(3)
В качестве альтернативы, если вы просто устали от конкатенации строк, всегда можно использовать альтернативный синтаксис:
var age = 3;
var str = ["Мне только", age, "лет"].join(" ");
Я использую этот шаблон во многих языках, когда не знаю, как сделать это правильно, и просто хочу быстро зафиксировать идею:
// JavaScript
let stringValue = 'Привет, меня зовут {name}. Вы {action} моего {relation}.'
.replace(/{name}/g ,'Иниго Монтойя')
.replace(/{action}/g ,'убили')
.replace(/{relation}/g,'отца')
;
Хотя это и не самый эффективный способ, мне кажется, что он читаем. Он всегда работает и всегда доступен:
' VBScript
dim template = "Привет, меня зовут {name}. Вы {action} моего {relation}."
dim stringValue = template
stringValue = replace(stringValue, "{name}" ,"Люка Скайуокера")
stringValue = replace(stringValue, "{relation}","Отца")
stringValue = replace(stringValue, "{action}" ,"являетесь")
ВСЕГДА
* COBOL
INSPECT stringValue REPLACING FIRST '{name}' BY 'Матерь Гренделя'
INSPECT stringValue REPLACING FIRST '{relation}' BY 'Сын плеча'
INSPECT stringValue REPLACING FIRST '{action}' BY 'нанесла смертельную рану.'
UPDATE:
Я думал, что это самоочевидно, но мне стало ясно, что это не так. Вы можете применить это в любой ситуации, когда у вас есть пара ключ/значение, чтобы пройтись по ним.
// JavaScript
let template = 'Привет, меня зовут {name}. Вы {action} моего {relation}.'
let values = {
name: 'Иниго Монтойя',
action: 'убил',
relation: 'отца',
};
let output = template;
for(let entry of Object.entries(values)){
output = output.replace('{'+entry[0]+'}',entry[1]);
}
console.log(output);
В последнее время я использую это в pl/SQL.
Самый простой способ сделать это:
`my string ${VARIABLE}`
Менее эффективный способ достижения той же цели выглядит следующим образом:
function format(str, ...params) {
for (const param of params)
str = str.replace("%", param);
return str;
}
Эту функцию можно использовать так:
format("My % string", "interpolation")
Если вы хотите использовать интерполяцию в выводе console.log
, просто сделайте это следующим образом:
console.log("Извержение 1: %s", eruption1);
^^
Здесь %s
— это то, что называется "спецификатором формата". console.log
имеет такую поддержку интерполяции встроенной.
Ваша проблема заключается в том, что вы хотите вывести строку с использованием переменной age
в формате "Мне 3 года!". Это можно сделать с помощью шаблонных строк ES6, используя обратные кавычки (`
). Вот пример кода, который вы можете использовать:
let age = 3;
console.log(`Мне ${age} года!`);
Обратите внимание, что при использовании шаблонных строк вы можете легко вставлять переменные и выражения в строку, заключив их в ${}
. Этот подход делает код более читабельным и удобным.
Как интерполировать переменные в строках JavaScript без конкатенации?
Преобразование объекта JS в строку JSON
Как преобразовать строку, разделённую запятыми, в массив?
Как заменить символ по заданному индексу в JavaScript?
Удалить первый символ строки, если он равен 0