typeof foo simplemente evaluará como 'object' si foo es una lista [] o un diccionario {} o cualquier tipo de objeto. ¿Cómo se puede notar la diferencia?
En Javascript, las matrices son objetos, al igual que el valor null . Simplemente usa el método Array.isArray para ver si algo es uno.
const obj = {} const arr = [] Array.isArray(obj) // false Array.isArray(arr) // true