I was just playing around with JavaScript and got stuck with a simple program.
I declared an array in JavaScript like
var a = [0, 1, 2];
Then as there is no fixed size for an array in JavaScript and we can add more to the array, I added another integer to array.
a[3] = 3;
And as expected If I try to access a[4]
I am definitely going to get it as undefined
.
Now, if I take an array
var a = [0,1,2];
And add another element
a[4] = 4;
I have intentionally not defined a[3]
, and this also gives me a[3]
as undefined
.
Here is a fiddle where this can be observed: http://jsfiddle.net/ZUrvM/
Now, if I try the same thing in Java,
int[] a = new int[4];
a[0] = 0;
a[1] = 1;
a[3] = 3;
Then I end up with
a[2] = 0;
You can see this on ideone: https://ideone.com/WKn6Rf
The reason for this in Java I found is that the four variables are defined while declaring the array and we can only assign values to the declared size of array.
But in JavaScript when I declare an array of size 3 and then add 5th element why does it not consider the 4th element to be null
or 0
if we have increased the array size beyond 4?
Why do I see this strange behavior in JavaScript, but not in other languages?
Why is this strange behavior in JavaScript?
Because arrays are only objects. If you access a nonexisting property, you get back undefined
. You simply didn't assign an element at index 3
, so there is nothing.
Auto-growing the array by assigning higher indices does not change this behaviour. It will affect the .length
property, yes, but the intermediate indices will stay nonexistent. This is known as a sparse array.
Why is this strange behaviour in Java / C / C++?
Because arrays are chunks of allocated memory, and when allocating an array of size 4, all its elements take their values from that memory location. To avoid indeterminate values, in some languages/occasions the fields get default-initialised, typically with 0
.
JavaScript isn't a strongly typed language.
In Java you declared an array of integers. The default value of any element in that array is 0.
In JavaScript, when you declare an array, the default value is undefined as it can hold anything, number, string, any object (including another array). All elements of a JavaScript array don't have to be the same type.
An array is a continuous collection of data. Say if you have a value at index 1
and index 10
, the rest will be filled by undefined
.
You can't create an array with empty values. 'Empty in your sense', is not undefined or null, it's empty :)
That continuous data is undefined means default assignment in JavaScript.
Say if you defined a variable,
var X;
console.log(X) //Undefined
it's not null
. null
is a user explicitly specifying a way to tell there is an empty data, and undefined
is the JavaScript engine way.