Why do these snippets of JavaScript behave differently even though they both encounter an error? Why do these snippets of JavaScript behave differently even though they both encounter an error? javascript javascript

Why do these snippets of JavaScript behave differently even though they both encounter an error?


Actually, if you read the error message properly, case 1 and case 2 throw different errors.

Case a.x.y:

Cannot set property 'y' of undefined

Case a.x.y.z:

Cannot read property 'y' of undefined

I guess it's best to describe it by step-by-step execution in easy English.

Case 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)}