ใน JS ดูเหมือนว่าเป็นไปไม่ได้ที่จะตรวจสอบว่าข้อโต้แย้งที่ส่งผ่านไปยังฟังก์ชั่นนั้นเป็นประเภท 'ข้อผิดพลาด' หรืออินสแตนซ์ของข้อผิดพลาดหรือไม่
ตัวอย่างเช่นสิ่งนี้ไม่ถูกต้อง:
typeof err === 'error'
เนื่องจากมีเพียง 6 ประเภทที่เป็นไปได้ (ในรูปแบบของสตริง):
ตัวดำเนินการ typeof ส่งคืนข้อมูลชนิดเป็นสตริง มีค่าที่เป็นไปได้หกค่าที่typeofส่งคืน:
"number", "string", "boolean", "object", "function" และ "undefined"
แต่ถ้าฉันมีกรณีใช้งานง่าย ๆ แบบนี้:
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
ดังนั้นวิธีที่ดีที่สุดในการตรวจสอบว่าอาร์กิวเมนต์เป็นตัวอย่างของข้อผิดพลาดอะไร
เป็นinstanceofผู้ประกอบการของความช่วยเหลือใด ๆ
errใน (พูด) ใน iframe (err instanceof Error) === falseแต่แล้วผ่านมันไปยังหน้าต่างหลักสำหรับการมอบคุณจะได้รับ นั่นเป็นเพราะ iframe และหน้าต่างหลักมีErrorต้นแบบวัตถุที่แตกต่างและแตกต่างกัน ในทำนองเดียวกันเช่นวัตถุobj = {};ประสงค์เมื่อส่งผ่านไปยังฟังก์ชั่นการทำงานในหน้าต่างที่แตกต่างกัน, (obj instanceof Object)===falseคราก (ถึงแม้จะเลวร้ายที่สุดใน IE ถ้าคุณเก็บการอ้างอิงถึง obj หลังจากที่หน้าต่างถูกทำลายหรือสำรวจพยายามที่จะโทร FNS วัตถุต้นแบบเหมือนobj.hasOwnProperty()จะโยนข้อผิดพลาด!)
catch((err)=>{if (err === ENOENT)ส่งกลับENOENT is not definedข้อผิดพลาด?
err instanceof Error