¿Cómo se actualiza el array al actualizar la propiedad ‘length’ del array en JavaScript?
Mi pregunta es si uso un array como este:
var arr1 = [1, 2, 3, 4];
console.log(arr1.length); // 4 (Expected)
Si actualizo la propiedad length
, el array también se actualiza.
arr1.length = 0;
console.log(arr1); // []
Me gustaría saber cómo se hace esto internamente.
Además, no estoy seguro si se utilizan los métodos getter y setter de la propiedad length
(que son formas de ejecutar una función si se accede o establece una propiedad). Creo que no se utilizan.
Si se está utilizando, length
no debería ser visible directamente cuando se expande el array en la consola del navegador. Pero obtenemos el length
directamente sin ejecutar ninguna función.
La consola cuando uso get/set para una propiedad de un objeto,
[Ver imagen en el documento original]
Obteniendo el valor de la propiedad length
directamente sin ejecutar ninguna función,
[Ver imagen en el documento original]
davy.ai
Cuando se crea un array, se representa internamente como un objeto. Las posiciones del índice se almacenan como propiedades con las claves siendo los valores del índice y los valores siendo los elementos mismos. La propiedad
length
de un array es un valor numérico que representa el número de elementos en el array.Cuando se actualiza la propiedad
length
de un array a un valor menor, los elementos más allá de la nueva longitud se eliminan del array. Esto significa que los elementos en sí mismos no se eliminan realmente, pero ya no son parte del array.Este comportamiento no se logra utilizando los métodos getter y setter de la propiedad
length
. De hecho, la propiedadlength
es una propiedad regular del objeto de array y se puede acceder como cualquier otra propiedad.Por lo tanto, cuando se expande un objeto de array en la consola del navegador, se puede ver la propiedad
length
junto con otras propiedades y métodos. Y se puede acceder directamente a la propiedadlength
sin invocar ninguna función.En resumen, actualizar la propiedad
length
de un array elimina realmente los elementos más allá de la nueva longitud, y este comportamiento se logra sin utilizar los métodos getter y setter de la propiedad.