Javascript - ¿Cómo mostrar caracteres de escape en una cadena? [duplicar]
Frecuentes
Visto 162,003 equipos
77
Very simple question, but for some reason I can't find the answer anywhere after 10 minutes of Googling. How can I show escape characters when printing in Javascript?
Ejemplo:
str = "Hello\nWorld";
console.log(str);
Da:
Hello
World
When I want it to give:
Hello\nWorld
3 Respuestas
126
Si tu meta es tener
str = "Hello\nWorld";
and output what it contains in string literal form, you can use JSON.stringify
:
console.log(JSON.stringify(str)); // ""Hello\nWorld""
const str = "Hello\nWorld";
const json = JSON.stringify(str);
console.log(json); // ""Hello\nWorld""
for (let i = 0; i < json.length; ++i) {
console.log(`${i}: ${json.charAt(i)} (0x${json.charCodeAt(i).toString(16).toUpperCase().padStart(4, "0")})`);
}
.as-console-wrapper {
max-height: 100% !important;
}
console.log
adds the outer quotes (at least in Chrome's implementation), but the content within them is a string literal (yes, that's somewhat confusing).
JSON.stringify
takes what you give it (in this case, a string) and returns a string containing valid JSON for that value. So for the above, it returns an opening quote ("
), la palabra Hello
, a backslash (\
), la carta n
, la palabra World
, and the closing quote ("
). The linefeed in the string is escaped in the output as a \
y una n
because that's how you encode a linefeed in JSON. Other escape sequences are similarly encoded.
Respondido el 27 de enero de 22 a las 19:01
@icosamuel - There is no backslash in that string. "asdasd\Sasdasd"
is "asdasdSasdasd"
. When you escape a character that doesn't have special meaning, the result is just the character. Put it another way, "\S".length
is 1, because that defines a one-character string with an S in it, exactly like "S"
lo hace. - TJ Crowder
@icosamuel - Not with a string literal; as soon as the string literal is parsed, that \
is gone because it has no meaning. If you use a template literal, you can use the String.raw
tagged template function: String.raw`\S`
(notice that those are backticks, not quotes) returns "\\S"
. - TJ Crowder
I hadn't thought of using JSON.stringify on anything other than objects, this is super-helpful. Thanks! - jose powlison
@BobStein - Done! - TJ Crowder
@SanjayVamja - Yes, that's U + 00A0, the primary non-breaking space. The escape for it in a JavaScript string literal is \xA0
or \u00A0
, but it's perfectly valid as a literal character. - TJ Crowder
28
JavaScript uses the \ (backslash) as an escape characters for:
- \' single quote
- \ "comillas dobles
- \ barra invertida
- \ n nueva línea
- \ r retorno de carro
- pestaña \ t
- \ b retroceso
- \ f formulario de alimentación
- \v vertical tab (IE < 9 treats '\v' as 'v' instead of a vertical tab ('\x0B'). If cross-browser compatibility is a concern, use \x0B instead of \v.)
- \0 null character (U+0000 NULL) (only if the next character is not a decimal digit; else it’s an octal escape sequence)
Note that the \v and \0 escapes are not allowed in JSON strings.
Respondido 10 Feb 14, 08:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript escaping or haz tu propia pregunta.
This question is marked as a duplicate, but I think the answer that everyone expects is here. :) - Jonathan H
I'd like to add the answer that one can simply use
String.raw`Hello\nWorld`
but this question has been incorrectly marked as duplicate - Somo S.