Complementando: embora a MDN chame esses tipos de primitivos, a especificação da linguagem chama-os de "Language Types".
Em outro trecho da especificação há a definição de "primitive value":
member of one of the types Undefined, Null, Boolean, Number, BigInt, Symbol, or String as defined in clause 6
(e o item 6 é o link que já vimos acima, que define os Language Types).
E um ponto confuso, também citado na MDN, é que os tipos primitivos não possuem métodos, mas se comportam como se possuíssem. Isso porque quando um método é chamado, é feito automaticamente um autoboxing para o respectivo objeto wrapper.
Ou seja, para os primitivos number
, string
, bigint
, boolean
e symbol
, existem os respectivos objetos wrappers. Se vc chama um método no tipo primitivo (por exemplo, algumaString.split(',')
), o autoboxing automaticamente cria o objeto wrapper e chama o método.
Já quanto aos objetos, a linguagem define vários outros além de Array
e Object
, como por exemplo Date
, Function
, Math
, RegExp
, entre outros.