why the program's result is undefined?

后端 未结 2 1785
迷失自我
迷失自我 2020-12-15 13:16
 var foo = {};
 foo.c = foo = {};
 console.log(foo.c);

why the result is undefined? i thought it is supposed to be \'[object Object]\'

2条回答
  •  攒了一身酷
    2020-12-15 13:46

    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
    

提交回复
热议问题