Following your example line by line:
a = {}
a now references the new object.
b = a;
b now references the same object that a references. Note that it does not reference a.
a['one'] = {};
The new object now has an index 'one' that references another new object.
When you do
a = a['one'];
You are setting a to refer to a['one'], which is that new object you created when you did a['one'] = {}. b still references the object you created with a = {}.
You are confusing the issue when you say “a has lost its reference to b” because a does not refer to b , nor vice versa. a and b refer to objects, and they can be made to refer to other objects. Like this:
With a = {}; b = a, you get
a
\
\
{ }
/
/
b
Then with a['one'] = {} you get
a
\
\
{ one: { } }
/
/
b
Then with a = a['one'] you get
a - - - -
\
{ one: { } }
/
/
b