В чем разница между неинициализированными элементами в массиве в JavaScript и Java?
Я просто играл с JavaScript и застрял в простой программе.
Я объявил массив в JavaScript, как
var a = [0, 1, 2];
Тогда, поскольку в JavaScript нет фиксированного размера для массива, и мы можем добавить больше в массив, я добавил еще одно целое число в массив.
a[3] = 3;
И, как ожидается, если я попытаюсь получить доступa[4]
Я определенно собираюсь получить это какundefined
.
Теперь, если я возьму массив
var a = [0,1,2];
И добавить еще один элемент
a[4] = 4;
Я намеренно не определиласьa[3]
и это также дает мнеa[3]
какundefined
.
Вот скрипка, где это можно наблюдать:http://jsfiddle.net/ZUrvM/
Теперь, если я попробую то же самое в Java,
int[] a = new int[4];
a[0] = 0;
a[1] = 1;
a[3] = 3;
Тогда я в конечном итоге
a[2] = 0;
Вы можете увидеть это на ideone:https://ideone.com/WKn6Rf
Я обнаружил, что причина этого в Java заключается в том, что четыре переменные определяются при объявлении массива, и мы можем назначать значения только объявленному размеру массива. Но в JavaScript, когда я объявляю массив размером 3, а затем добавляю 5-й элемент, почему он не считает 4-й элементnull
или же0
если мы увеличили размер массива за пределы 4?
Почему я вижу это странное поведение в JavaScript, а не в других языках?