Skip to content

Commit f556b2f

Browse files
committed
1-6-2 rest param -- rename dir & actualizacion texto
1 parent 57ef02f commit f556b2f

File tree

1 file changed

+49
-5
lines changed
  • 1-js/06-advanced-functions/02-rest-parameters-spread

1 file changed

+49
-5
lines changed

1-js/06-advanced-functions/02-rest-parameters-spread/article.md

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,11 @@ showName("Julio", "Cesar");
9696
showName("Ilya");
9797
```
9898

99-
Antiguamente, los parámetros rest no existían en el lenguaje, y usar `arguments` era la única manera de obtener todos los argumentos de una función, sin importar la cantidad de ellos.
100-
101-
Y aún funciona, podemos usarlo hoy en día.
99+
Antiguamente, los parámetros rest no existían en el lenguaje, y usar `arguments` era la única manera de obtener todos los argumentos de una función. Y aún funciona, podemos encontrarlo en código antiguo.
102100

103101
Pero la desventaja es que a pesar de que `arguments` es símil-array e iterable, no es un array. No soporta los métodos de array, no podemos ejecutar `arguments.map(...)` por ejemplo.
104102

105-
Además, siempre contiene todos los argumentos. No podemos capturarlos parcialmente, como hicimos con los parámetros rest.
103+
Además, siempre contiene todos los argumentos. No podemos capturarlos parcialmente como hicimos con los parámetros rest.
106104

107105
Por lo tanto, cuando necesitemos estas funcionalidades, los parámetros rest son preferidos.
108106

@@ -119,9 +117,10 @@ function f() {
119117

120118
f(1); // 1
121119
```
122-
````
123120

124121
Como recordamos, las funciones flecha no tienen su propio `this`. Ahora sabemos que tampoco tienen el objeto especial `arguments`.
122+
````
123+
125124
126125
## Operador Spread [#spread-operator]
127126
@@ -226,6 +225,51 @@ Pero hay una sutil diferencia entre `Array.from(obj)` y `[...obj]`:
226225
Por lo tanto, para la tarea de convertir algo en un array, `Array.from` tiende a ser mas universal.
227226
228227
228+
## Obtener una copia de un objeto array
229+
230+
¿Recuerdas cuando hablamos acerca de `Object.assign()` [anteriormente](https://javascript.info/object#cloning-and-merging-object-assign)?
231+
232+
Es posible hacer lo mismo con la sintaxis de spread
233+
234+
```js run
235+
let arr = [1, 2, 3];
236+
let arrCopy = [...arr]; // separa el array en una lista de parameters
237+
// luego pone el resultado en un nuevo array
238+
239+
// ¿los arrays tienen el mismo contenido?
240+
alert(JSON.stringify(arr) === JSON.stringify(arrCopy)); // true
241+
242+
// ¿los arrays son iguales?
243+
alert(arr === arrCopy); // false (no es la misma referencia)
244+
245+
// modificando nuestro array inicial no modifica la copia:
246+
arr.push(4);
247+
alert(arr); // 1, 2, 3, 4
248+
alert(arrCopy); // 1, 2, 3
249+
```
250+
251+
Nota que es posible hacer lo mismo para hacer una copia de un objeto:
252+
253+
```js run
254+
let obj = { a: 1, b: 2, c: 3 };
255+
let objCopy = { ...obj }; // separa el objeto en una lista de parámetros
256+
// luego devuelve el resultado en un nuevo objeto
257+
258+
// ¿tienen los objetos el mismo contenido?
259+
alert(JSON.stringify(obj) === JSON.stringify(objCopy)); // true
260+
261+
// ¿son iguales los objetos?
262+
alert(obj === objCopy); // false (no es la misma referencia)
263+
264+
// modificando el objeto inicial no modifica la copia:
265+
obj.d = 4;
266+
alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4}
267+
alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
268+
```
269+
270+
Esta manera de copiar un objeto es mucho más corta que `let objCopy = Object.assign({}, obj);` o para un array `let arrCopy = Object.assign([], arr);` por lo que preferimos usarla siempre que podemos.
271+
272+
229273
## Resumen
230274
231275
Cuando veamos `"..."` en el código, son los parámetros rest o el operador spread.

0 commit comments

Comments
 (0)