In JavaScript, events propagate through event bubbling (from innermost to outermost) and event capturing (opposite direction). Both allow event handling at different DOM levels.