Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

715
Visualizações
Backticks (`…`) llamando a una función en JavaScript

No estoy seguro de cómo explicar esto, pero cuando corro

 console.log`1`

En Google Chrome, obtengo un resultado como

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

¿Por qué el acento grave llama a la función de registro y por qué crea un índice de raw: Array[1] ?

Pregunta planteada en la sala de JS por Catgocat, pero ninguna respuesta tenía sentido, además de algo sobre cadenas de plantillas que realmente no encajaban por qué sucede esto.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Se llama Plantilla etiquetada en ES-6 Se puede leer más sobre ellos Aquí , divertido, encontré el enlace en la sección destacada del mismo chat.

Pero la parte relevante del código está debajo (básicamente puede crear una ordenación filtrada).

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

Básicamente, simplemente está etiquetando el "1" con la función console.log, como lo haría con cualquier otra función. Las funciones de etiquetado aceptan valores analizados de cadenas de plantilla y los valores por separado sobre los que se pueden realizar otras tareas.

Babel transpila el código anterior para

 var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; }; console.log(_taggedTemplateLiteralLoose(["1"], ["1"]));

Como puede ver en el ejemplo anterior, después de ser transpilado por babel, la función de etiquetado (console.log) recibe el valor de retorno del siguiente código transpilado es6->5.

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

El valor de retorno de esta función se pasa a console.log, que luego imprimirá la matriz.

over 4 years ago · Santiago Trujillo Relatório

0

Literal de plantilla etiquetada:

La siguiente sintaxis:

 function`your template ${foo}`;

Se denomina literal de plantilla etiquetada.


La función que se llama como literal de plantilla etiquetada recibe sus argumentos de la siguiente manera:

 function taggedTemplate(strings, arg1, arg2, arg3, arg4) { console.log(strings); console.log(arg1, arg2, arg3, arg4); } taggedTemplate`a${1}b${2}c${3}`;

  1. El primer argumento es una matriz de todos los caracteres de cadena individuales.
  2. El argumento restante se corresponde con los valores de las variables que recibimos a través de la interpolación de cadenas. Observe en el ejemplo que no hay valor para arg4 (porque solo hay 3 veces la interpolación de cadenas) y, por lo tanto, se registra undefined cuando intentamos registrar arg4

Usando la sintaxis del parámetro rest:

Si no sabemos de antemano cuántas veces tendrá lugar la interpolación de cadenas en la cadena de la plantilla, suele ser útil utilizar la sintaxis del parámetro rest. Esta sintaxis almacena los argumentos restantes que recibe la función en una matriz. Por ejemplo:

 function taggedTemplate(strings, ...rest) { console.log(rest); } taggedTemplate `a${1}b${2}c${3}`; taggedTemplate `a${1}b${2}c${3}d${4}`;

over 4 years ago · Santiago Trujillo Relatório

0

Llegó tarde a la fiesta pero, TBH, ninguna de las respuestas da una explicación al 50% de la pregunta original ("por qué el raw: Array[1] ")

1. ¿Por qué es posible llamar a la función sin paréntesis, usando acentos graves?

 console.log`1`

Como otros han señalado, esto se llama Plantilla etiquetada (más detalles también aquí ).

Usando esta sintaxis, la función recibirá los siguientes argumentos:

  • Primer argumento: una matriz que contiene las diferentes partes de la cadena que no son expresiones.
  • Resto de argumentos: cada uno de los valores que se están interpolando (es decir, los que son expresiones).

Básicamente, los siguientes son 'casi' equivalentes :

 // Tagged Template fn`My uncle ${uncleName} is ${uncleAge} years old!`
 // function call fn(["My uncle ", " is ", " years old!"], uncleName, uncleAge);

(ver punto 2. para entender por qué no son exactamente iguales)

2. ¿Por qué el ["1", raw: Array[1]] ???

La matriz que se pasa como primer argumento contiene una propiedad raw , que permite acceder a las cadenas sin procesar tal como se ingresaron (sin procesar secuencias de escape).

Ejemplo 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); //In the folder C:DocumentsFoo, create a new file console.log(a.raw); //In the folder C:\Documents\Foo, create a new file }

¿Qué, una matriz con una propiedad? ???

Sí, dado que las matrices de JavaScript son en realidad objetos, pueden almacenar propiedades .

Ejemplo:

 const arr = [1, 2, 3]; arr.property = "value"; console.log(arr); //[1, 2, 3, property: "value"]
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda