Можно ли построить строку в Javascript, в которую встроены «переменные»?

#javascript

Вопрос:

Я работаю над PDF-файлом с некоторыми сценариями и применяю код к полям с помощью консоли и нескольких простых циклов, чтобы сэкономить на повторных усилиях. В некоторых случаях я применяю пользовательский сценарий вычисления к полю, в котором одно целое число должно изменяться из одного поля в другое. Если бы все сценарии были одинаковыми, я бы запустил это в консоли отладчика:

 var s = "if(this.getField("Span A").value >= 60){n
    event.value = Math.round(((this.getField("Span A").value*41500 - 1674500)/233));n
}else{n
    event.value = Math.round((this.getField("Span A").value*3500/60));n
}";

for (var i = 0; i < this.numFields; i  ){
    var f = this.getField(getNthFieldName(i));
    if(f.name.match(/quant a/i) != null){
        var n = f.name.match(/d/g);
        f.setAction("Calculate", s);
    }
} 

У меня есть много полей «Квантов», и каждая группа (A, B и т. Д.) Будет иметь аналогичный расчет. Поля называются «Квант А1», «Квант А2» и т.д. Квант A1 должен вычисляться с использованием входных данных из диапазона A1.

В приведенном выше сценарии было бы действительно здорово, если бы в строке сценария была переменная, которой я мог бы передать значение (n) для подключения к строке, по сути, так же, как работает вызов функции.

Возможно ли это?

Вот моя фантастическая версия того, как, по моему мнению, это могло бы выглядеть (это просто для дальнейшего объяснения моих намерений; я не думаю, что это действительно сработает таким образом):

 var s(x) = "if(this.getField("Span A""x").value >= 60){n
    event.value = Math.round(((this.getField("Span A""x").value*41500 - 1674500)/233));n
}else{n
    event.value = Math.round((this.getField("Span A""x").value*3500/60));n
}";

for (var i = 0; i < this.numFields; i  ){
    var f = this.getField(getNthFieldName(i));
    if(f.name.match(/quant a/i) != null){
        var n = f.name.match(/d/g);
        f.setAction("Calculate", s(n));
    }
} 

Комментарии:

1. Вы пытаетесь заново изобрести строки шаблонов ?

2. Как упоминалось выше, строки шаблона-это способ сделать это. Однако зачем вам нужна такая строка кода? Если вы планируете использовать eval() , я бы настоятельно рекомендовал отказаться от этого.

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

4. Не изобретать заново, но, может быть, открыть? Я не знал о шаблонных литералах. Может ли кто-нибудь помочь мне понять, как бы я использовал это в данном контексте? Я ни в коем случае не являюсь профессиональным программистом.

Ответ №1:

Вы можете использовать строковые литералы, если используете ES6 и выше. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals?retiredLocale=nl

 const greetings = "I'm a variable!";
let string = `Hi! this is a variable: ${greetings}`;

console.log(string); 

В противном случае соедините его с оператором .

Ответ №2:

Если я правильно понял ваш вопрос. Я думаю, вы хотите использовать шаблонные литералы. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

Используйте обратные ссылки вместо «или», чтобы вставлять свои переменные в строку.

 const a ='Cheese'
const b= 'is Delicious'
 

${a} ${b} выведет «Сыр вкусный»