Note that you can't distinguish between empty slots and slots past the end of the array using that, but if you know the length of the array, then you already know that 3 isn't part of it, so you don't need to test 3 in arr.

You can also filter out the empty slots like this:

arr = arr.filter( function ( _, i ) { return i in arr } );

Email codedump link for How to tell between undefined array elements and empty slots?