Несогласованный тип для строк шаблона JavaScript ES6
При тестировании новых строк шаблонов JavaScript ES6 (в Firefox, если это имеет значение) я заметил некоторые несоответствия в их типах.
Я определил пользовательскую функцию следующим образом:
function f(a) {
console.log(typeof(a));
console.log(a);
}
Сначала я проверил функцию "нормально", используя круглые скобки вокруг строки шаблона.
f(`Hello, World!`)
Как и ожидалось, это дало Тип string и Hello, World! был выведен на консоль.
Затем я вызвал функцию сокращенно, без скобок и несоответствий произошло.
f`Hello, World!`
Тип стал object, и Array [ "Hello, World!" ] был выведен на консоль.
Почему строка шаблона была завернута в массив при использовании второго метода? Это просто ошибка в Firefox (ES6 является новым стандартом, в конце концов) или такое поведение ожидается по какой-то причине?
1 ответ:
// A function call, passed the result of a template literal. f(`str`)И
// A tagged template call, passed metadata about a template. f`str`Не одно и то же. Первый вызов
fс одной строкой в качестве аргумента. Второй вызываетfс несколькими параметрами, в зависимости от шаблона. напримерf`one${2}three${4}five`Пройдет
ff(strings, ...values)С
strings // ['one', 'three', 'five'], представляющий собой список всех строковых разделов шаблона, и
values // [2, 4]- это все значения, которые помещаются между строками. Это позволяет тегам предварительно обработать строку и обработать ее.