29

Я не знаю, как это объяснить, но когда я бегуОбратные кавычки вызова функции

console.log`1` 

В Google Chrome, я получаю выход как

console.log`1` 
VM12380:2 ["1", raw: Array[1]] 

Почему кавычка вызова журнала функция, и почему она делает индекс raw: Array[1]?

Вопрос, поднятый в комнате JS Catgocat, но никаких ответов не было, кроме чего-то около templating strings, что действительно не соответствовало, почему это происходит.

+2

Связанные: [Javascript Es6 Tagged Templates - Когда используется сырье? Когда используется cookie?] (Http://stackoverflow.com/q/27782577/218196), [Как функции тегов с тегами ES6 интерпретируют их порядок аргументов?] (Http://stackoverflow.com/q/24816777/218196) –

ответ

24

Это называется Tagged Template String в ES-6. Более подробно о них можно прочитать. Here, funny Я нашел ссылку в разделе, посвященном чату.

Но приведенная часть кода ниже (вы можете в основном создать сортировку фильтра).

function tag(strings, ...values) { 
    assert(strings[0] === 'a'); 
    assert(strings[1] === 'b'); 
    assert(values[0] === 42); 
    return 'whatever'; 
} 
tag `a${ 42 }b` // "whatever" 

В основном его просто помечать «1» с console.log функции, как это будет делать с любой другой функции. Функции тегов принимают разобранные значения строк шаблона и значения, отдельно от которых могут выполняться дополнительные задачи.

Бабель transpiles приведенный выше код для

var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; }; 

console.log(_taggedTemplateLiteralLoose(["1"], ["1"])); 

Как вы можете видеть в приведенном выше примере, после того, как transpiled Бабеля, функция мечения (console.log) в настоящее время передается возвращаемое значение из следующих es6-> 5 преобразованный код.

_taggedTemplateLiteralLoose (["1"], ["1"]);

Возвращаемое значение этой функции передается в console.log, который затем печатает массив.

Смежные вопросы