Skip to content

Commit 10be5cb

Browse files
authored
Update article.md
Actualización grossa
1 parent 1f96e20 commit 10be5cb

File tree

1 file changed

+44
-38
lines changed

1 file changed

+44
-38
lines changed

1-js/05-data-types/03-string/article.md

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ let guestList = `Invitados:
3939
alert(guestList); // una lista de invitados, en múltiples líneas
4040
```
4141

42+
Se ve natural, ¿no es cierto? Pero las comillas simples y dobles no funcionan de esa manera.
43+
4244
Si intentamos usar comillas simples o dobles de la misma forma, obtendremos un error:
4345

4446
```js run
@@ -63,26 +65,30 @@ alert(guestList); // una lista de invitados en múltiples líneas
6365
Por ejemplo, estas dos líneas son iguales, solo que escritas en forma diferente:
6466

6567
```js run
66-
alert('Hola\nMundo'); // dos líneas usando el "símbolo de nueva línea"
68+
let str1 = "Hello\nWorld"; // dos líneas usando el "símbolo de nueva línea"
69+
70+
// dos líneas usando nueva línea normal y backticks
71+
let str2 = `Hello
72+
World`;
6773

68-
// dos líneas usando una nueva línea normal y los backticks
69-
alert(`Hola
70-
Mundo`);
74+
alert(str1 == str2); // true
7175
```
7276

7377
Existen otros tipos de caracteres especiales, menos comunes.
7478

7579
Esta es la lista completa:
7680

77-
| Caracter | Descripción |
78-
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
79-
| `\b` | Retroceso |
80-
| `\f` | Salto de página |
81-
| `\n` | Nueva línea |
82-
| `\r` | Retorno |
83-
| `\t` | Tab |
84-
| `\uNNNN` | Un símbolo unicode con el código hex `NNNN`, por ejemplo `\u00A9` -- es un unicode para el símbolo de derechos de autor `©`. Deben ser exactamente 4 dígitos hex. |
85-
| `\u{NNNNNNNN}` | Algunos caracteres extraños son codificados con dos símbolos unicode, utilizando hasta 4 bytes. Este unicode largo requiere llaves a su alrededor. |
81+
| Carácter | Descripción |
82+
|-----------|-------------|
83+
|`\n`|Nueva línea|
84+
|`\r`|Carriage return (retorno de carro): No se usa solo. Los archivos de texto de Windows usan una combinaión de dos caracteres `\r\n` para representar un corte de línea. |
85+
|`\'`, `\"`|Comillas|
86+
|`\\`|Barra invertida|
87+
|`\t`|Tabulación|
88+
|`\b`, `\f`, `\v`| Backspace, Form Feed, Vertical Tab -- Se mantienen por compatibilidad. No son usados actualmente |
89+
|`\xXX`|Carácter Unicode con el hexadecimal dado `XX`, por ej. `'\x7A'` es lo mismo que `'z'`.|
90+
|`\uXXXX`|Un símbolo unicode con el hexadecimal dado `XXXX` en codificación UTF-16, p.ej. `\u00A9` -- es el unicode para el símbolo copyright `©`. Debe ser exactamente 4 dígitos hex. |
91+
|`\u{X…XXXXXX}` (1 a 6 caracteres hex)|Un símbolo unicode con el hexadecimal dado en codificación UTF-32. Algunos caracteres raros son codificados con dos símbolos unicode, tomando 4 bytes. De esta manera podemos insertar códigos largos. |
8692

8793
Ejemplos con unicode:
8894

@@ -128,14 +134,13 @@ La propiedad 'length' entrega el largo del string:
128134
alert(`Mi\n`.length); // 3
129135
```
130136

131-
Notar que `\n` es un caracter "especial" único, por lo que el largo es `3`.
137+
Notar que `\n` es un carácter "especial" único, por lo que el largo es `3`.
132138

133139
```warn header="`length` es una propiedad"
134140
Gente con experiencia en otros lenguajes a veces comete el error de tipear `str.length()` en vez de `str.length`. Eso no funciona.
135141

136-
Por favor notar que `str.length` es una propiedad numérica, no una función. No hay necedidad de agregar un paréntesis después de ella.
137-
138-
````
142+
Por favor notar que `str.length` es una propiedad numérica, no una función. No hay necesidad de agregar un paréntesis después de ella.
143+
```
139144
140145
## Accediendo caracteres
141146
@@ -144,13 +149,13 @@ Para acceder a un carácter en la posición `pos`, se debe usar paréntesis cuad
144149
```js run
145150
let str = `Hola`;
146151
147-
// el primer caracter
152+
// el primer carácter
148153
alert( str[0] ); // H
149154
alert( str.charAt(0) ); // H
150155
151-
// el último caracter
156+
// el último carácter
152157
alert( str[str.length - 1] ); // a
153-
````
158+
```
154159

155160
Los corchetes son una forma moderna de acceder a los caracteres, mientras que `charAt` existe principalmente por razones históricas.
156161

@@ -190,8 +195,10 @@ Por ejemplo:
190195

191196
```js run
192197
let str = 'Hola';
198+
193199
str = 'h' + str[1]; // reemplaza el string
194-
alert(str); // hola
200+
201+
alert( str ); // hola
195202
```
196203

197204
En la sección siguiente veremos más ejemplos de esto.
@@ -215,10 +222,8 @@ alert('Interfaz'[0].toLowerCase()); // 'i'
215222

216223
Existen muchas formas de buscar por subcadenas de caracteres dentro de una cadena completa.
217224

218-
219225
### str.indexOf
220226

221-
222227
El primer método es [str.indexOf(substr, pos)](mdn:js/String/indexOf).
223228

224229
Este busca un `substr` en `str`, comenzando desde la posición entregada `pos`, y retorna la posición donde es encontrada la coincidencia o `-1` en caso de no encontrar nada.
@@ -279,7 +284,7 @@ while ((pos = str.indexOf(target, pos + 1)) != -1) {
279284
Existe también un método similar [str.lastIndexOf(substr, position)](mdn:js/String/lastIndexOf) que busca desde el final del string hasta el comienzo.
280285

281286
Este imprimirá las ocurrencias en orden invertido.
282-
````
287+
```
283288
284289
Existe un leve inconveniente con `indexOf` en la prueba `if`. No podemos utilizarlo en el `if` como sigue:
285290
@@ -289,7 +294,7 @@ let str = "Widget con id";
289294
if (str.indexOf("Widget")) {
290295
alert("Lo encontramos"); // no funciona!
291296
}
292-
````
297+
```
293298

294299
La `alerta` en el ejemplo anterior no se muestra ya que `str.indexOf("Widget")` retorna `0` (lo que significa que encontró el string en la posoción inicial). Correcto pero `if` considera `0` como `falso`.
295300

@@ -305,11 +310,11 @@ if (str.indexOf("Widget") != -1) {
305310
}
306311
```
307312

308-
````smart header="El truco bitwise NOT"
313+
#### El truco "bitwise NOT"
309314

310-
Uno de los trucos antiguos es el operador [bitwise NOT](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Bitwise_Operators#Bitwise_NOT)) `~`. Este convierte el número en un entero de 32-bits (elimina la parte decimal si es que existe) y luego invierte todos los bits en su representación binaria.
315+
Uno de los antiguos trucos es el operador [bitwise NOT](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Bitwise_Operators#Bitwise_NOT)) `~`. Este convierte el número en un entero de 32-bits (elimina la parte decimal si es que existe) y luego invierte todos los bits en su representación binaria.
311316

312-
Para enteros de 32 bits, el llamado `~n` significa exactamente lo mismo que `-(n+1)` (debido al formato IEEE-754).
317+
En la práctica, esto significa una simple cosa: Para enteros de 32 bits, `~n` es igual a `-(n+1)`.
313318

314319
Por ejemplo:
315320

@@ -402,9 +407,10 @@ Existen 3 métodos en JavaScript para obtener un substring: `substring`, `substr
402407
```
403408

404409
`str.substring(comienzo [, final])`
405-
: Retorna la parte del string _entre_ `comienzo` y `final`.
410+
: Devuelve la parte del string _entre_ `comienzo` y `final`.
406411

407412
Esto es casi lo mismo que `slice`, pero permite que `comienzo` sea mayor que `final`.
413+
408414
Por ejemplo:
409415

410416
```js run
@@ -434,7 +440,6 @@ Existen 3 métodos en JavaScript para obtener un substring: `substring`, `substr
434440

435441
El primer argumento puede ser negativo, para contar desde el final:
436442

437-
438443
```js run
439444
let str = "strin*!*gi*/!*fy";
440445
alert( str.substr(-4, 2) ); // gi, desde la 4ta posición toma 2 caracteres
@@ -493,6 +498,7 @@ Todos los strings son codificados usando [UTF-16](https://es.wikipedia.org/wiki/
493498
```js run
494499
alert( String.fromCodePoint(90) ); // Z
495500
```
501+
496502
También podemos agregar caracteres unicode por sus códigos usando `\u` seguido de un código hex:
497503

498504
```js run
@@ -502,7 +508,6 @@ Todos los strings son codificados usando [UTF-16](https://es.wikipedia.org/wiki/
502508

503509
Ahora veamos los caracteres con códigos `65..220` (el alfabeto latín y unos extras) haciendo de ellos un string:
504510

505-
506511
```js run
507512
let str = '';
508513

@@ -571,11 +576,11 @@ alert('𩷶'.length); // 2, un raro jeroglífico chino
571576

572577
Notar que los pares sustitutos no existían en el tiempo que JavaScript fue creado, y por ello no son procesados correctamente por el lenguaje!
573578

574-
De hecho, tenemos un sólo símbolo en cada string más arriba, pero el `length` (largo) muestra `2`.
579+
De hecho, tenemos un solo símbolo en cada string más arriba, pero el `length` (largo) muestra `2`.
575580

576581
`String.fromCodePoint` y `str.codePointAt` son algunos métodos extraños que tratan con pares sustitutos. Aparecieron recientemente en el lenguaje. Antes de ellos, existían sólo [String.fromCharCode](mdn:js/String/fromCharCode) y [str.charCodeAt](mdn:js/String/charCodeAt). Estos métodos son actualmente lo mismo que `fromCodePoint/codePointAt`, pero no funcionan con pares sustitutos.
577582

578-
Pero por ejemplo, obtener un símbolo puede ser dificil, ya que los pares substitutos son tratados como dos caracteres:
583+
Obtener un símbolo puede ser dificil, ya que los pares substitutos son tratados como dos caracteres:
579584

580585
```js run
581586
alert('𝒳'[0]); // símbolo extraño...
@@ -626,10 +631,12 @@ Esto proporciona una gran flexibilidad, pero también un problema interesante: d
626631
Por ejemplo:
627632

628633
```js run
629-
alert('S\u0307\u0323'); // Ṩ, S + punti arriba + punto debajo
630-
alert('S\u0323\u0307'); // Ṩ, S + punto debajo + punto arriba
634+
let s1 = 'S\u0307\u0323'; // Ṩ, S + punti arriba + punto debajo
635+
let s2 = 'S\u0323\u0307'; // Ṩ, S + punto debajo + punto arriba
631636

632-
alert('S\u0307\u0323' == 'S\u0323\u0307'); // false
637+
alert( `s1: ${s1}, s2: ${s2}` );
638+
639+
alert( s1 == s2 ); // false aunque los caracteres se ven idénticos (?!)
633640
```
634641

635642
Para resolver esto, existe un algoritmo de "normalización unicode" que lleva cada cadena a la forma "normal".
@@ -669,5 +676,4 @@ Existen varios otros métodos útiles en cadenas:
669676
- `str.repeat(n)` -- repite el string `n` veces.
670677
- ...y más. Mira el [manual](mdn:js/String) para más detalles.
671678

672-
673-
Strings también tienen métodos para buscar / reemplazar con expresiones regulares. Pero ese tema merece un capítulo separado, así que volveremos a eso más adelante.
679+
Strings también tienen métodos con expresiones regulares para buscar/reemplazar. Pero ese tema es importante, así que es explicado en la sección <info:regular-expressions> .

0 commit comments

Comments
 (0)