Ответ 1
На самом деле, если вы правильно прочитали сообщение об ошибке, случай 1 и случай 2 выдают разные ошибки.
Case axy
:
Невозможно установить свойство 'y' из неопределенного
Дело axyz
:
Невозможно прочитать свойство 'y' из неопределенного
Думаю, лучше всего описать это пошаговым исполнением на простом английском языке.
Случай 1
// 1. Declare variable 'a'
// 2. Define variable 'a' as {}
var a = {}
// 1. Declare variable 'b'
// 2. Define variable 'b' as {}
var b = {}
try {
/**
* 1. Read 'a', gets {}
* 2. Read 'a.x', gets undefined
* 3. Read 'b', gets {}
* 4. Set 'b.z' to 1, returns 1
* 5. Set 'a.x.y' to return value of 'b.z = 1'
* 6. Throws "Cannot **set** property 'y' of undefined"
*/
a.x.y = b.z = 1
} catch(e){
console.error(e.message)
} finally {
console.log(b.z)
}