String.raw()

O método estático String.raw() é uma função tag de modelos literais, similar ao prefixo r no Python ou o prefixo @ no C# para string literais (ainda sim, existe uma diferença, veja explicações nessa discussão). Ele é usado para pegar as strings no formato "cru" de modelos literais, isto é, substituições (ex: ${foo}) são processados, mas "escapes" (ex:. \n) não são.

Sintaxe

String.raw(callSite, ...sub)

String.raw`templateString`

Parâmetros

callSite
 modelo bem-formatado de objeto de local de chamada, como { raw: ['foo', 'bar', 'baz'] }.
...substitutions
Contém os valores das substituições.
templateString
Um modelo string, opcionalmente com substituições (${...}).

Valor retornado

A forma crua de uma String de um modelo string dado.

Exceções

TypeError
Um TypeError é jogado se o primeiro argumento não é um Objeto bem formado.

Descrição

Na maioria dos casos, String.raw() é usado com template strings. A primeira sintaxe mencionada acima raramente é usada, porque o mecanismo JavaScript a chamará com os argumentos apropriados para você, assim como com outras funções de tag.

String.raw() é a única função de tag embutida de strings de template; ele funciona exatamente como a função de modelo padrão e executa a concatenação. Você pode até reimplementá-lo com o código JavaScript normal.

Exemplos

Usando String.raw()

String.raw`Hi\n${2+3}!`;
// 'Hi\n5!', o caractere após 'Hi'
// não é um caractere de quebra de linha,
// '\' e 'n' são dois caracteres.

String.raw`Hi\u000A!`;
// 'Hi\u000A!', o mesmo aqui, agora nós teremos os caracteres
//  \, u, 0, 0, 0, A, 6.
// Todos as formas de quebra de linha serão ineficazes
// e as contra barras estarão inclusas no valor retornado.
// Você pode confirmar isso verificando a propriedade .length
// da string.

let name = 'Bob';
String.raw`Hi\n${name}!`;
// 'Hi\nBob!', substituições são processadas.

// Normalmente você não chamaria String.raw() como uma função,
// mas para simular `t${0}e${1}s${2}t` você pode fazer:
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
// Note que 'test', uma string, é um objeto array-like
// O código abaixo é equivalente a:
// `foo${2 + 3}bar${'Java' + 'Script'}baz`
String.raw({
  raw: ['foo', 'bar', 'baz'] 
}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'

Especificações

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.raw' in that specification.
Padrão Definição inicial.
ECMAScript (ECMA-262)
The definition of 'String.raw' in that specification.
Padrão em tempo real
Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
rawChrome Full support 41Edge Full support 12Firefox Full support 34IE No support NoOpera No support NoSafari Full support 10WebView Android No support NoChrome Android Full support 41Firefox Android Full support 34Opera Android No support NoSafari iOS Full support 10Samsung Internet Android Full support 4.0nodejs Full support 4.0.0

Legend

Full support  
Full support
No support  
No support

Veja também