JavaScript supports three primitive datatypes - numbers, strings, and booleans. It also supports objects as a composite datatype. Variables in JavaScript can hold values of any datatype and their type can change. Variables are declared with var and have either global or local scope depending on where they are defined. Variable names must start with a letter or underscore and cannot be reserved keywords.