The difference, in most languages, is that a for iterates over things that don't have to exist, and guarantees us the order of access; on the other hand, a for each iterates over things that must necessarily exist. In addition, we do not guarantee the order in which they are accessed
the for in allows us to iterate only object and the for of allows us to iterate only arrays