¿Cuál es la diferencia entre los elementos no inicializados en una matriz en JavaScript frente a Java?

Estaba jugando con JavaScript y me quedé atascado con un programa simple.

Declaré una matriz en JavaScript como

var a = [0, 1, 2];

Luego, como no hay un tamaño fijo para una matriz en JavaScript y podemos agregar más a la matriz, agregué otro entero a la matriz.

a[3] = 3;

Y como se esperaba Si trato de acceder a[4], definitivamente lo obtendré como undefined.

Ahora, si tomo una matriz

var a = [0,1,2];

Y agrega otro elemento

a[4] = 4;

No lo he definido intencionalmente a[3], y esto también me da a[3]como undefined.

Aquí hay un violín donde se puede observar esto: http://jsfiddle.net/ZUrvM/

Ahora, si intento lo mismo en Java,

int[] a = new int[4];
a[0] = 0;
a[1] = 1;

a[3] = 3;

Entonces termino con

a[2] = 0;

Puede ver esto en ideone: https://ideone.com/WKn6Rf

La razón de esto en Java que encontré es que las cuatro variables se definen al declarar la matriz y solo podemos asignar valores al tamaño declarado de la matriz. Pero en JavaScript cuando declaro una matriz de tamaño 3 y luego agrego el 5to elemento, ¿por qué no considera que el 4to elemento es nullo 0si hemos aumentado el tamaño de la matriz más allá de 4?

¿Por qué veo este comportamiento extraño en JavaScript, pero no en otros idiomas?

Respuesta 1

JavaScript no es un lenguaje fuertemente tipado.

En Java declaraste una matriz de enteros. El valor predeterminado de cualquier elemento en esa matriz es 0.

En JavaScript, cuando declara una matriz, el valor predeterminado no está definido, ya que puede contener cualquier cosa, número, cadena, cualquier objeto (incluida otra matriz). Todos los elementos de una matriz de JavaScript no tienen que ser del mismo tipo.

Respuesta: 2

Realmente no pude encontrar las palabras sobre cómo describir mi pregunta en el título. Lo que intento lograr es algo como esto: (Pseudocódigo) SuperClass [] superArray = new SuperClass []; ...

He estado trabajando diariamente con el Modelo de Memoria Java durante algunos años. Creo que entiendo bien el concepto de carreras de datos y las diferentes formas de evitarlas (por ejemplo, ...

Estoy desarrollando una aplicación web java y eso incluye un applet. Ese applet depende de dos archivos jar: JFreeChart (para trazar gráficos en el lado del cliente) - 1.7 mb (tamaño del jar ...

Digamos que tengo el siguiente conjunto de cadenas. Cadena [] arr = {"Índice0", "Índice1", "Índice2", "Índice3", ... "Índice n"}; Puedo iterar sobre toda la matriz usando: for (String eachElement: arr) {// ...