Atrasado para a festa mas, TBH, nenhuma das respostas explica 50% da pergunta original ("por que raw: Array[1]
")
1. Por que é possível chamar a função sem parênteses, usando crases?
console.log`1`
Como outros apontaram, isso é chamado Tagged Template (mais detalhes também aqui ).
Usando essa sintaxe, a função receberá os seguintes argumentos:
- Primeiro argumento: um array contendo as diferentes partes da string que não são expressões.
- Resto de argumentos: cada um dos valores que estão sendo interpolados (ou seja, aqueles que são expressões).
Basicamente, os seguintes são 'quase' equivalentes :
fn`My uncle ${uncleName} is ${uncleAge} years old!`
fn(["My uncle ", " is ", " years old!"], uncleName, uncleAge);
(veja o ponto 2. para entender por que eles não são exatamente iguais)
2. Por que o ["1", raw: Array[1]]
???
O array passado como primeiro argumento contém uma propriedade raw
, que permite acessar as strings brutas medida que são inseridas (sem processar sequências de escape).
Exemplo de caso de uso:
let fileName = "asdf";
fn`In the folder C:\Documents\Foo, create a new file ${fileName}`
function fn(a, ...rest) {
console.log(a);
console.log(a.raw);
}
O quê, um array com uma propriedade ??? ???
Sim, uma vez que os arrays JavaScript são na verdade objetos, eles podem armazenar propriedades .
Exemplo:
const arr = [1, 2, 3];
arr.property = "value";
console.log(arr);