Bem lembrado. De fato, "objeto" é um termo bem amplo, e cada linguagem acaba usando-o de maneiras diferentes (o mesmo vale para "primitivo"). Em muitos casos, nada tem a ver com orientação a objeto - só pra citar um exemplo, em C o termo "objeto" é definido como uma "região de armazenamento de dados do ambiente de execução, cujo conteúdo pode representar valores".
Outro detalhe: null
é listado com um dos valores primitivos. E na especificação da linguagem não há nenhuma menção a um "objeto null" (como há para os outros tipos listados, como "Number Object", "Boolean Object", etc, mas nada de "Null Object"). Então o null
não é um objeto?
Mas então porque typeof null
retorna "object"? Simples, porque a especificação da linguagem diz que é assim:
5. If val is null, return "object".
Se algo é null
, então typeof algo
deve retornar "object". Ou seja, a especificação não tem nenhuma menção a "Null Object" (como tem para todos os subtipos de Object
), mas ao mesmo tempo define que o tipo de null
é "object".