Por que o `Object.prototype.toString` sempre retorna` [object *] `?

Se você ligarObject.prototype.toString.call(anything) o resultado é sempre[object Something], OndeSomething poderia ser uma das várias coisas. Minha pergunta é por que a parte "objeto" está lá? Parece supérfluo ter sempre lá. Não diz nada sobre o argumento que foi passado.

Object.prototype.toString.call(null);
=> [object Null]

Object.prototype.toString.call(undefined);
=> [object Undefined]

Desde anull eundefined não são objetos (e falhaCheckObjectCoercible), a parte "objeto" realmente parece sem sentido.

Eu tenho que pensar que existia alguma razão originalmente que a parte de "objeto" foi colocada lá, mesmo que a razão tenha sido perdida desde então, e agora é apenas preservada por razões históricas.

Alguém pode ajudar a esclarecer isso?

Para ser claro, eu já sei comoObject.prototype.toString pode ser usado para obter o[[Class]] (tipo) de um objeto. Minha pergunta diz respeito ao motivo do formato da string retornada - especificamente a parte "objeto" no começo. Quero saber se alguma vez houve um motivo para essa parte ou se há uma possível razão futura para essa parte. Talvez no futuro possa retornar algo diferente de "objeto"? Posso esperar que ele sempre retorne "objeto"? Em caso afirmativo, por que ele ainda retorna? Quem quer uma função para sempre retornar a mesma coisa, não importa qual seja a entrada?

questionAnswers(3)

yourAnswerToTheQuestion