You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/04-array/article.md
+52-1Lines changed: 52 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -350,7 +350,7 @@ let arr = [1, 2, 3, 4, 5];
350
350
arr.length=2; // truncamos a 2 elementos
351
351
alert( arr ); // [1, 2]
352
352
353
-
arr.length=5; // reponemos la longitud length
353
+
arr.length=5; // reponemos la longitud length
354
354
alert( arr[3] ); // undefined: el valor no se recupera
355
355
```
356
356
@@ -429,6 +429,53 @@ alert( "1" + 1 ); // "11"
429
429
alert( "1,2"+1 ); // "1,21"
430
430
```
431
431
432
+
## No compares arrays con ==
433
+
434
+
Las arrays en JavaScript, a diferencia de otros lenguajes de programación, no deben ser comparadas con el operador `==`.
435
+
436
+
Este operador no tiene un tratamiento especial para arrays, trabaja con ellas como con cualquier objeto.
437
+
438
+
Recordemos las reglas:
439
+
440
+
- Dos objetos son iguales `==` solo si hacen referencia al mismo objeto.
441
+
- Si uno de los argumentos de `==` es un objeto y el otro es un primitivo, entonces el objeto se convierte en primitivo, como se explica en el capítulo <info:object-toprimitive>.
442
+
- ...Con la excepción de `null` y `undefined` que son iguales `==` entre sí y nada más.
443
+
444
+
La comparación estricta `===` es aún más simple, ya que no convierte tipos.
445
+
446
+
Entonces, si comparamos arrays con `==`, nunca son iguales, a no ser que comparemos dos variables que hacen referencia exactamente a la misma array.
447
+
448
+
Por ejemplo:
449
+
```js run
450
+
alert( [] == [] ); // falso
451
+
alert( [0] == [0] ); // falso
452
+
```
453
+
454
+
Estas arrays son técnicamente objetos diferentes. Así que no son iguales. El operador `==` no hace comparaciones de elemento a elemento.
455
+
456
+
Comparaciones con primitivos también pueden dar resultados aparentemente extraños:
457
+
458
+
```js run
459
+
alert( 0== [] ); // verdadero
460
+
461
+
alert('0'== [] ); // falso
462
+
```
463
+
464
+
Aquí, en ambos casos, comparamos un primitivo con un objeto array. Entonces la array `[]` se convierte a primitivo para el propósito de comparar y se convierte en una string vacía `''`.
465
+
466
+
Luego el proceso de comparación continúa con los primitivos, como se describe en el capítulo <info:type-conversions>:
467
+
468
+
```js run
469
+
// después de que [] se convierta en ''
470
+
alert( 0=='' ); // verdadero, ya que '' se convierte en el número 0
471
+
472
+
alert('0'=='' ); // falso, sin conversión de tipos, strings diferentes
473
+
```
474
+
475
+
Entonces, ¿cómo comparamos arrays?
476
+
477
+
Simple: no utilices el operador `==`. En lugar, compáralas elemento a elemento en un bucle o utilizando métodos de iteración explicados en el siguiente capítulo.
478
+
432
479
## Resumen
433
480
434
481
Los arrays son una clase especial de objeto, adecuados para almacenar y manejar items de datos ordenados.
@@ -460,4 +507,8 @@ Para iterar sobre los elementos de un array:
460
507
-`for (let item of arr)`-- la sintaxis moderna para items solamente.
461
508
-`for (let i in arr)`-- nunca lo uses.
462
509
510
+
Para comparar arrays, no uses el operador `==` (como tampoco `>`, `<` y otros), ya que no tienen un tratamiento especial para arrays. Lo manejan como cualquier objeto y no es lo que normalmente queremos.
511
+
512
+
En su lugar puedes utilizar el bucle `for..of` para comparar arrays elemento a elemento.
513
+
463
514
Volveremos a los arrays y estudiaremos más métodos para agregar, quitar, extraer elementos y ordenar arrays en el capítulo <info:array-methods>.
0 commit comments