Igualdade de objeto e tipo primitivo

Eu sei que objetos idênticos não são iguais, ou seja:

var obj = { name: "Value" };
var obj2 = { name: "Value" };

console.log("obj equals obj2: " + (obj === obj2)); //evaluates to false

No entanto, os tipos primitivos são:

var str = "string1";
var str2 = "string1";

console.log("str equals str2: " + (str === str2)); //evaluates to true

Minha pergunta é o porquê. Por que objetos e primitivos são tratados de maneira diferente? Se um objeto nada mais é que um contêiner vazio, com apenas os atributos que você especifica para colocar no contêiner, por que os atributos idênticos do contêiner não seriam avaliados como iguais? Procurei por esta resposta no SO e em outros lugares, mas não encontrei uma resposta.

Um objeto JS é tratado como algo diferente no DOM do que um tipo primitivo?

obrigado

questionAnswers(5)

yourAnswerToTheQuestion