It doesn't deal with sparse arrays.
It does, in fact. It doesn't tell you how many members have genuine values, no, but that's not its purpose. It's simply a count of the members.
To be clear, sparse array members in JavaScript arrays are non-existent by nature (i.e. they're notional and exist only because the array's length property says they do).
It doesn't deal with delete array[lastIndex]
Because the delete operator removes properties from objects, not arrays. Arrays are, again, really just objects which receive some special treatment. If you do an end run around that special treatment, then things will get weird.
In the case of using delete on an array, which you shouldn't be, all you're really doing is making the deleted member sparse. To actually manually pop the last member, you must also change the value of length. That is simply how arrays work in JavaScript.
It doesn't actually add any elements to the array when setting it to a number larger than the current length.
It adds sparse members, which, as noted, are notional. That's simply how JavaScript handles them.
It's usefulness is basically limited to a specific kind of array (dense, zero-based positive index). As long as you can ensure that the arrays you're dealing with are only ever such, you're fine.
All arrays are zero-base positive index, as I've explained twice already. As I noted in previous replies, you may certainly use invalid array indices on an array, however, they'll be treated as regular object property names, not array indices which are special sauce. Again, an "index" of -2 or 1e12 is no different from using "foo". You're using property names at that point, not array indices, and none of the special treatment is in effect.
The video originally linked also claimed you can't access a JavaScript array with a negative index, which is plainly false as well.
It is not, actually. Again, you're conflating regular object property access with the special array index access.
At this point, the only thing I can suggest is for you to read the ECMAScript specification, because you are confusing the limited special treatment array objects receive with generic object access.