A primitive value is one of the types Undefined, Null, Boolean, Number, or String.
The foundation set of primitive values is represented at the lowest level of the language implementation within the core functionality sub-set. The host environment may add other primitive values.
|Aggregate||A collection of atomic types assembled collectively into an object.|
|Arithmetic||All types that yield a value that can be operated on numerically.|
|Array||Collections of objects and identifiers assembled into a sequence.|
|Basic||The fundamental simple, non-object types.|
|Boolean||This type can store and yield true or false values.|
|Completion||Used only as the intermediate result of expression evaluations and cannot be stored in object properties.|
|List||Used only as the intermediate result of expression evaluations and cannot be stored in object properties.|
|Null||This has exactly one value, null, and is distinct from undefined.|
|Number||Integer and floating-point values are all stored in a generic number type.|
|Object||An object is an unordered collection of properties. Each property consists of a name, a value, and a set of attributes.|
|Reference||Used only as the intermediate result of expression evaluations and cannot be stored in object properties.|
|Scalar||The non-object types.|
|String||Strings are arrays of characters that are accessible individually by indexing their position in the sequence.|
|Undefined||This value is returned by variables that have not yet been assigned a value.|
Note that arrays and objects are not primitive types.
ECMA 262 edition 2 - section - 4.3.2
ECMA 262 edition 3 - section - 4.3.2