Рассмотрим это:
var a = {}, b = a;
В терминах spec, b = a сводится к PutValue(b, GetValue(a)), правильно? И GetValue(a) использует абстрактную операцию GetBindingValue("a", strictFlag), которая возвращает "значение" в a. И "значение" - это "объект" , первоначально назначенный на a. Затем "объект" хранится в b, как и любое другое значение.
Но что такое "объект" именно? Где спецификация говорит, что значения типа объекта ведут себя иначе, чем примитивы? Это только то, что примитивы неизменяемы, а объекты изменяемы?
Я спрашиваю, потому что мы всегда говорим о "ссылках на объекты" и "ссылочных значениях" при попытке объяснить поведение объектов, но я не мог найти ничего аналогичного этому в спецификации.