A diferencia del lenguaje Java, las matrices en JavaScript tienen tres características:
1. Sin tipo. Los miembros de una matriz pueden ser de cualquier tipo, y la misma matriz también puede estar compuesta por muchos tipos diferentes de miembros.
2. La longitud es variable. La longitud de una matriz se puede cambiar dinámicamente, por lo que no hay problema de acceso fuera de los límites de acceso a la matriz en JavaScript.
3. Discontinuidad. Las posiciones de los miembros en la matriz pueden ser continuas (0, 1, 2, 3 ...) o discontinuas. Cualquier matriz tiene un atributo llamado longitud. Cuando los miembros de la matriz son continuos, el valor de longitud es consistente con el número de miembros de la matriz; Cuando los miembros de la matriz no son continuos, el valor de longitud es mayor que el número de miembros de la matriz. En comparación con las matrices continuas, el rendimiento de lectura y escritura de matrices discontinuas es peor.
experimento:
La copia del código es la siguiente:
var o = [42, "Texto de muestra", {x: 88}]; // La matriz JavaScript no está tipo.
console.log (o); // [42, "Texto de muestra", objeto {x = 88}]
O [3] = 27; // La matriz JavaScript es dinámica.
console.log (o); // [42, "Texto de muestra", objeto {x = 88}, 27]
o [5] = 99; // La matriz JavaScript es escasa.
console.log (o); // [42, "Texto de muestra", objeto {x = 88}, 27, indefinido, 99]
Como se puede ver en el ejemplo anterior, para matrices discontinuas, JavaScript volverá indefinido al acceder al miembro faltante. Si la matriz es continua, pero uno de sus miembros está indefinido, el resultado de acceder a la matriz es el mismo:
La copia del código es la siguiente:
var a = [42, "texto de muestra", {x: 88}, 27, indefinido, 99];
console.log (a); // [42, "texto de muestra", objeto {x = 88}, 27, indefinido, 99]
La matriz es discontinua y tiene miembros faltantes, que es lo mismo que la matriz es continua pero tiene miembros indefinidos. En ambos casos, el resultado de acceder al contenido de la matriz es el mismo. Pero todavía hay algunas diferencias sutiles entre los dos, principalmente manifestados en el acceso a la clave de matriz:
La copia del código es la siguiente:
console.log (4 in o); // falso
console.log (4 en a); // Verdadero
Se puede ver que aunque los resultados obtenidos al acceder al contenido en estos dos casos son los mismos, su mecanismo interno es completamente diferente: cuando la matriz es descontinua, falta un cierto miembro, por lo que al acceder al miembro, JavaScript regresa indefinido; Cuando la matriz es continua, todos los miembros existen, pero los valores de algunos miembros son relativamente especiales y están indefinidos.
Del ejemplo anterior, también podemos ver que la esencia de matrices en JavaScript es solo un objeto con números como claves, y no hay diferencia entre los valores y objetos de clave ordinarios. De hecho, al leer y escribir una matriz, JavaScript intentará convertir los parámetros en enteros positivos. Si la conversión es exitosa, la operación de matriz se realizará (actualice automáticamente la propiedad de longitud de la matriz). Si falla, los parámetros se convertirán en una cadena y luego lea y escriba a un objeto normal. Por supuesto, en la implementación del intérprete JavaScript, se hacen muchas optimizaciones de rendimiento para la característica de las matrices que usan números como claves. Por lo tanto, en uso real, si las claves del objeto son todos los números, directamente utilizando el objeto de matriz obtendrán resultados más eficientes.
En el proceso de definir una matriz, JavaScript permite que aparezcan comas adicionales, y también permite que faltaran miembros de la matriz entre dos comas:
La copia del código es la siguiente:
Var x = [1,2,3,]; // se omitirá la coma final.
console.log (x.length); // 3
Var y = [1 ,, 3]; // El miembro se puede perder.
console.log (y); // [1, indefinido, 3]
console.log (1 en y); // falso
console.log (y.length); // 3
Para la creación de matrices, JavaScript admite cuatro métodos:
1. Use literales (como expresiones de soporte en los ejemplos anteriores) para crear directamente un objeto de matriz.
2. Use el constructor Array () y no pase en ningún parámetro. En este caso, se crea una matriz vacía con el mismo efecto que [].
3. Use el constructor de matriz () para pasar en un entero positivo como la longitud de la matriz. En este caso, JavaScript reservará el espacio de memoria correspondiente para almacenar esta matriz. Vale la pena señalar que las claves de la matriz no están definidas en este momento, es decir, no hay miembros en la matriz. Su efecto es equivalente al de [,,,,]
4. Use el constructor de matriz () para pasar en los miembros de la matriz.
experimento:
La copia del código es la siguiente:
var z = nueva matriz (10); // Memoria previa al alquiler, pero aún no se define el índice.
console.log (3 en z); // falso
var m = nueva matriz (42, 33, 99, "prueba", {k: 99});
console.log (m); // [42, 33, 99, "prueba", objeto {k = 99}]
En el estándar EcMascript 5, Array.IsArray () se puede usar para determinar si un objeto es una matriz:
La copia del código es la siguiente:
Array.isArray ([]); // verdadero
Array.isArray ({}); // falso