Dynamic languages are not "untyped", they are typed, sometimes even strongly typed, but their types are associated with values rather than variables. There's one unfortunate issue with JavaScript and static type analysis though: JavaScript wasn't designed for type inference, and constructs like eval make compile-time type inference problematic at best. Retrofitting type inference on existing dynamic languages such as Python, Ruby and JavaScript has proven to be problematic, largely because these languages were never designed with type analysis in mind.