Skip to content
CodingThailand's Blog
CodingThailand's Blog

by โค้ชเอก

  • Home
  • About Me
  • CodingThailand.com
CodingThailand's Blog

by โค้ชเอก

เคยเจอ “TypeError: Cannot read property ‘x’ of undefined” หรือเปล่า

17/07/202517/07/2025

เปลี่ยนจากใช้ && แบบเดิมเป็น ?. (Optional Chaining) ดีกว่าไหม ทำให้โค้ดสะอาดและบำรุงรักษาง่ายกว่า

.

ปัญหาที่เจอบ่อย เวลาเข้าถึง property หลายชั้นใน Object ของ JavaScript มักเจอ TypeError: Cannot read property ‘x’ of undefined เราต้องเขียนโค้ดป้องกันซ้ำ ๆ เช่น

if (user && user.profile && user.profile.avatar) { … }

.

วิธีนี้ใช้ได้ผลปกติ แต่ลองมาใช้ Optional Chaining (?.) จะดีกว่าไหม

การใช้ user?.profile?.avatar จะหยุดทำงานทันทีหากค่าก่อนหน้าเป็น null หรือ undefined และคืนค่า undefined แทนการโยน Error วิธีนี้จะทำให้โค้ดสั้น อ่านง่าย และดูแลรักษาง่ายขึ้นครับ

ตัวอย่างการใช้งานจริง ดูในรูปนะครับ

.

นอกจากนี้ยังสามารถใช้งานร่วมกับ Nullish Coalescing (??) ได้ด้วย เช่น

const avatar = user?.profile?.avatar ?? ‘default.png’;

ให้ค่าเริ่มต้นเมื่อผลเป็น null | undefined

.

ข้อจำกัดและข้อควรระวัง

ถ้าค่าก่อนหน้าเป็น false, 0 หรือ ” มันจะยังไม่หยุดมันจะทำต่อ! การใช้มากเกินไปอาจซ่อนบั๊กหรือข้อบ่งชี้ว่าการออกแบบข้อมูลนั้นควรถูกปรับใหม่ และเราต้องใส่ ?. ให้ครบทุกระดับ เช่น user?.profile?.avatar ไม่ใช่ user?.profile.avatar แบบนี้

.

สรุป การใช้ Optional Chaining จะช่วยลดบรรทัดโค้ด ป้องกัน Error อ่านง่าย ชัดเจน เพิ่มความเสถียรของแอป โดยเฉพาะเมื่อข้อมูลไม่แน่นอนหรือมีโหลดแบบไดนามิก

.

การรองรับเบราว์เซอร์

ใช้งานได้ใน Chrome 80+, Firefox 74+, Safari 13.1+, Edge 80+

หากต้องรองรับ IE ให้ใช้ Babel ปลั๊กอิน เช่น @babel/plugin-proposal-optional-chaining

.

ใครมีโค้ดเก่าที่ใช้ && ยาวๆ ลองรีแฟกเตอร์ให้เป็น ?. ดูนะครับ โค้ดน่าจะสะอาดขึ้น อ่านง่าย และบำรุงรักษาง่ายกว่าเดิม

Views: 9

JavaScript Uncategorized

Post navigation

Previous post
Next post

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Posts ล่าสุด

  • การใช้งาน Prefetching ใน Next.js
  • 14 ข้อคิด เพื่อการเป็น Developer ที่ดีขึ้น จาก “Lee Robinson”
  • เคยเจอ “TypeError: Cannot read property ‘x’ of undefined” หรือเปล่า
  • บันทึกการเขียนเว็บไซต์ใหม่ในรอบ 10 ปี ย้ายมาใช้ Next.js
  • ทำไมการจัดการ Error ใน JavaScript ถึงเป็นเรื่องท้าทาย?

Recent Comments

    หมวดหมู่

    • .NET
    • AI
    • Android
    • Angular
    • Angular 2
    • Coding
    • CSS
    • Database
    • Editor
    • Flutter
    • Git
    • HTML5
    • Ionic 2
    • Ionic 4
    • Ionic Framwork
    • JavaScript
    • Laravel
    • Laravel 5
    • Next.js
    • Node.js
    • PHP
    • PHP 7
    • Plugins
    • React
    • React Native
    • Template
    • Tools
    • TypeScript
    • UI
    • Uncategorized
    • Vue.js
    • XAMPP
    • Yii
    • คอร์สเรียน
    • แรงบันดาลใจ

    Archives

    • July 2025
    • April 2025
    • November 2024
    • October 2024
    • April 2020
    • February 2020
    • August 2019
    • September 2018
    • August 2018
    • February 2018
    • November 2017
    • October 2017
    • August 2017
    • July 2017
    • April 2017
    • October 2016
    • August 2016
    • May 2016

    Tags

    .NET android Angular Angular 2 Atom Coding Coding Standard CSS CSS 3 Datepicker Express.js extensions Git HTML HTML5 Ionic2 JavaScript Laravel5 laravel 5.5 MariaDB Material Design MySQL Node.js npm PHP PHP7 plugins PouchDB recaptcha Restful sail.js template typescript typscript XAMPP Yii2

    ผู้เยี่ยมชม

    • 0
    • 1,818,198
    • 547,570
    • 9
    ©2025 CodingThailand's Blog | WordPress Theme by SuperbThemes