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