Skip to content

Commit 986f770

Browse files
authored
Merge pull request #410 from Arnau-Ninerola/array_comparasion
Translate arrays comparasion
2 parents 68a433f + 5f1c9cc commit 986f770

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

1-js/05-data-types/04-array/article.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ let arr = [1, 2, 3, 4, 5];
350350
arr.length = 2; // truncamos a 2 elementos
351351
alert( arr ); // [1, 2]
352352

353-
arr.length = 5; // reponemos la longitud length
353+
arr.length = 5; // reponemos la longitud length
354354
alert( arr[3] ); // undefined: el valor no se recupera
355355
```
356356

@@ -429,6 +429,53 @@ alert( "1" + 1 ); // "11"
429429
alert( "1,2" + 1 ); // "1,21"
430430
```
431431

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+
432479
## Resumen
433480

434481
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:
460507
- `for (let item of arr)` -- la sintaxis moderna para items solamente.
461508
- `for (let i in arr)` -- nunca lo uses.
462509

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+
463514
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

Comments
 (0)