foo.splice(0) is actually sufficient. From the docs:
"If deleteCount is omitted, or if its value is greater than or equal to the number of elements after the position specified by start, then all the elements from start to the end of the array will be deleted."
foo = []; Will reassign the reference but other pointers can still have the array.
foo.length=1 will remove all elements but the first.