const book = {};

console.log(book.page.number); // TypeError: book.page is undefined

ابتدا باید بدونیم که book.page خودش undefined هست. وقتی می‌خوایم یک پراپرتی که تو یک آبجکت وجود نداره رو صدا بزنیم، مقدار پیشفرض undefined اما بدون خطا رو می‌گیریم:

console.log(book.page); // undefined
console.log(book.gateau); // undefined
console.log(book.wheel); // undefined
console.log(book.sunflower); // undefined

خب نبود یک پراپرتی توی یک آبجکت، باعث نمیشه که برنامه مختل بشه. چون آبجکت‌ها ممکنه هنگام اجرا شدن برنامه بارها دستکاری بشن. مثلا پراپرتی‌ها اضافه و ویرایش بشن. و اگه بخاطر نبودن یک پراپرتی توی یک آبجکت روند اجرای برنامه مختل میشد، جاوا اسکریپت زبان قابل انعطافی به حساب نمی‌اومد!

و اما جواب این سوال که چرا کد اولی ارور میده (باعث میشه اجرای برنامه متوقف بشه)؟ 🤔
چون ما داریم از یک چیز undefined که page.book هست، یک پراپرتی دیگه رو فراخونی می‌کنیم. یعنی مثلا یک چیزی مثل این:

<undefined value>.property;

مشخصه که یک مقدار undefined نمیتونه شامل یک پراپرتی یا هر چیز دیگه‌ای باشه.

 

منبع: