The point is you're defining a dynamic array. lBound and uBound can never be used on an empty dynamic array, as it doesn't have any dimensions (yet).
And anyway, you can never use a dynamic array without setting its bounds (via ReDim statment. e.g. Redim a(30)). At which point checking if the array is empty is quite pointless (as you've set the bounds yourself).
Since VBScript is an incredibly inefficient language anyway, why not use regular static arrays instead?
a = Array()
And now all the uBound and lBound commands will work.
If you're REALLY keen on dynamic arrays, I would suggest implementing a dynamic array class of yourself to make your life much much easier.
Here is what is done in case of some function which return dynamic array. The finally return a one with index -1. Most of the times we run a loop from LBound to UBOUnd and in this case a loop from 0 to -1 does not run.