var foo = {};
foo.c = foo = {};
console.log(foo.c);
why the result is undefined? i thought it is supposed to be '[object Object]'
Strange things are happening here in the assignments:
foo.c = (foo = {})
The reference to foo.c
is resolved first and points to the old foo
object, before the inner expression is evaluated where foo
is re-assigned with the {}
emtpy object literal. So your code is equivalent to
var foo1 = {};
var foo2 = {};
foo1.c = foo2;
console.log(foo2.c) // obviously undefined now
You can also try
var foo = {}, old = foo;
foo.c = foo = {};
console.log(old, foo, old.c===foo); // {c:{}}, {}, true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With