Espaço de José Longo

Espaço de José Longo

Textos sobre:


Outras Secções:


Textos recentes


Javascript e a "new line" (nova linha)

Isto de tentar continuamente aprender coisas, por vezes leva-nos a bater com a cabeça na parede. Estou a tentar fazer umas coisas em javascript... e hoje lá tive que dar umas cabeçadas. Por fim a parede caiu :)

Hoje tive uma guerra com o "\r" (carriage return) e o "\n" (new line) e também temos a junção dos dois "\r\n" mais habitual em Windows a tentar fazer a concatenação de string com nova linha em javascript. O pretendido até era simples, tendo umas variáveis dinâmicas, pretendia que estes valores ficassem separados por linhas para apresentar numa janela alert()... Simples, não é ?

Numa situação normal em outras linguagens, faria algo como

var mensagem = "Verifique a lista dos produtos a seguir: \n";
for ( i = 0; i < cadeia.length; i++){
mensagem += cadeia[i] + " - " + valor[i] + "\n";
}
alert(mensagem);


//Uncaught SyntaxError: Invalid or unexpected token

Com o código semelhante ao apresentado acima, surgia-me sempre o erro indicado no fim...

Depois de diversas tentativas, com aspas simples, variações no texto e variáveis... o erro persistia...

Ok, tempo de procurar por uma solução... que acabei por encontrar.

Nas cadeias de caracteres em javascript, onde possa haver multilinha e queiramos manter essas linhas ou adicionar programaticamente com "\r", "\n" ou "\r\n"  temos que usar...

ACENTO  GRAVE como delimitador !!!

Então nestas situações em javascript temos que usar " ` " como delimitador de cadeia de caracteres em javascript. Sendo assim, o código anterior ficaria algo como:

var mensagem = `Verifique a lista dos produtos a seguir: \n`;
for ( i = 0; i < cadeia.length; i++){
mensagem += cadeia[i] + " - " + valor[i] + `\n`;
}
alert(mensagem);

Sendo só necessário nas cadeias onde temos os códigos para nova linha.

Também podíamos ter algo como:

var texto = `esta
é
uma
cadeia
partida`;


Que o compilador javascript não se queixava e apresentaria essa cadeia literalmente como está.

Não é caso para... mas quase :)