javascript arrays

JavaScript: diferencia entre la matriz y el objeto tipo matriz



arrays (3)

¿Qué es?

Un objeto que tiene una propiedad de longitud de un entero no negativo, y generalmente algunas propiedades indexadas. Por ejemplo

var ao1 = {length: 0}, // like [] ao2 = {0: ''foo'', 5: ''bar'', length: 6}; // like ["foo", undefined × 4, "bar"]

Puede convertir objetos tipo matriz en sus homólogos de matriz utilizando Array.prototype.slice

var arr = Array.prototype.slice.call(ao1); // []

¿Cuál es la diferencia entre él y una matriz normal?

No está construido por Array o con un Array literal [] , por lo que (generalmente) no heredará de Array.prototype . La propiedad de longitud generalmente tampoco se actualizará automáticamente.

ao1 instanceof Array; // false ao1[0] = ''foo''; ao1.length; // 0, did not update automatically

¿Cuál es la diferencia entre un objeto tipo matriz y un objeto normal?

No hay diferencia. Incluso las matrices normales son objetos en JavaScript

ao1 instanceof Object; // true [] instanceof Object; // true

Me he encontrado mucho con el término "Objeto similar a una matriz" en JavaScript. ¿Qué es? ¿Cuál es la diferencia entre él y una matriz normal? ¿Cuál es la diferencia entre un objeto tipo matriz y un objeto normal?


Creo que, en ES6, algo es como una matriz si es iterable (tiene una propiedad [Symbol.iterator] ).


La famosa HTMLCollection ( documentation ) y los arguments ( documentation ) son objetos en forma de matriz que se crean automáticamente.

Algunas diferencias rápidas de tipo matriz (por ejemplo, HTMLCollection ) entre ejemplos de matriz real:

var realArray = [''value1'', ''value2'']; var arrayLike = document.forms;

Similitudes:

El captador de longitud es el mismo:

arrayLike.length; // returns 2; realArray.length; // returns 2; //there are 2 forms in the DOM.

El getter indexado es el mismo:

arrayLike[0]; // returns an element. realArray[0]; // returns an element. (''value'')

Ambos son objects :

typeof arrayLike; // returns "object" typeof realArray; // returns "object"

Diferencias:

En forma de matriz, los métodos join() , concat() join() , concat() , etc., no son funciones:

arrayLike.join(", "); // returns Uncaught TypeError: arrayLike.join is not a function (also relevant to `concat()`, `includes()` etc.) realArray.join(", "); // returns "value1, value2"

La matriz como no es realmente una matriz:

Array.isArray(arrayLike); //returns "false" Array.isArray(realArray); //returns "true"

En una matriz como no puede establecer la propiedad de longitud:

arrayLike.length = 1; arrayLike.length; //return 2; //there are 2 forms in the DOM. realArray.length = 1; realArray.length; //return 1;