Error TypeError: 'undefined' is not an object เกิดขึ้นเมื่อพยายามเข้าถึงพร็อพเพอร์ตี้หรือเรียกเมธอดบนค่า undefined ข้อความนี้เฉพาะ Safari/WebKit (Chrome/Edge/Firefox แสดง Cannot read properties of undefined)
ตัวอย่างโค้ด
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TypeError undefined</title>
<style>
body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.result { font-size: 18px; font-weight: 500; color: blueviolet; }
</style>
</head>
<body>
<h1>TypeError: 'undefined' is not an object</h1>
<div class="result"></div>
<br />
<button class="Btn">คลิกที่นี่</button>
<h3>กดปุ่มเพื่อเข้าถึง property ของตัวแปร undefined</h3>
<script>
const resEle = document.querySelector(".result");
const btnEle = document.querySelector(".Btn");
let person; // undefined
btnEle.addEventListener("click", () => {
try {
alert(person.name); // ❌ TypeError
} catch (err) {
resEle.textContent = "จับ Error: " + err.message;
console.error(err);
}
});
</script>
</body>
</html>
ผลลัพธ์

เมื่อกดปุ่ม "คลิกที่นี่":

สาเหตุทั่วไป
- ตัวแปร宣告แต่ไม่ได้กำหนดค่า:
let x;→x.prop - ฟังก์ชันคืนค่า
undefinedโดยไม่ได้ตั้งใจ:getUser().name - เข้าถึง array index ที่ไม่มี:
arr[10].prop - DOM query ไม่เจอ:
document.querySelector(".missing").value - Promise resolve ด้วย undefined:
Promise.resolve().then(x => x.prop)
วิธีป้องกัน (Defensive Coding)
// 1. Optional Chaining (ES2020) - แนะนำมากที่สุด
const name = person?.name?.first; // undefined แทน error
// 2. Logical AND (Short-circuit)
const name = person && person.name;
// 3. Nullish Coalescing (ES2020)
const name = (person?.name) ?? "Unknown";
// 4. ตรวจสอบก่อนใช้
if (person && person.name) { ... }
// 5. Default Parameters
function greet(user = { name: "Guest" }) {
console.log(user.name);
}
// 6. TypeScript (Static checking) - จับได้ตอน compile
ข้อความ Error ใน Browser ต่างๆ
| Browser/Engine | Error Message |
|---|---|
| Safari / WebKit | TypeError: 'undefined' is not an object |
| Chrome / Edge (V8) | TypeError: Cannot read properties of undefined (reading 'name') |
| Firefox (SpiderMonkey) | TypeError: person is undefined |
| Node.js (V8) | TypeError: Cannot read properties of undefined |
Debug Tips
- เปิด DevTools → Console → ดู Stack Trace
- ใช้
debugger;หรือ Breakpoint ก่อนบรรทัดที่ error - Console:
console.log(person)ตรวจสอบค่าก่อนเข้าถึง - Enable "Pause on caught exceptions" ใน DevTools Sources tab