JavaScript: Porównanie równości między dwoma obiektami / macierzą

Zgadnijmy dwa obiekty o tej samej właściwości:

var x = {a : 'some'},
      y = {a: 'some'};

wydajność:

x == y; ix === y; oba dają fałsz

Podobnie dla dwóch tablic,

var p = [1, 2, 3],
      q = [1,2,3];

p == q ip === q obaj dająfalse.

Ale jeśli wykonam następujące czynności:

var x = y = {a: 'some'};
var p = q = [1, 2, 3];

Wszystkie powyższe porównania dajątrue.

Dlaczego Javascript robi takie rzeczy? Wytłumacz, proszę.