Trong JS, dường như không thể kiểm tra xem một đối số được truyền cho hàm có thực sự thuộc loại 'lỗi' hoặc một trường hợp Lỗi không.
Ví dụ: điều này không hợp lệ:
typeof err === 'error'
vì chỉ có 6 loại có thể (ở dạng chuỗi):
Toán tử typeof trả về thông tin kiểu dưới dạng chuỗi. Có sáu giá trị có thể typeoftrả về:
"số", "chuỗi", "boolean", "đối tượng", "hàm" và "không xác định".
Nhưng nếu tôi có một trường hợp sử dụng đơn giản như thế này:
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);
}
}
Vì vậy, cách tốt nhất để xác định xem một đối số có phải là một trường hợp Lỗi không?
là người instanceofđiều hành của bất kỳ trợ giúp?
errvào (giả sử) một iframe, nhưng sau đó chuyển nó đến cửa sổ cha mẹ để bàn giao, bạn sẽ nhận được (err instanceof Error) === false. Đó là bởi vì iframe và cửa sổ cha của nó có các Errornguyên mẫu đối tượng khác nhau, khác biệt . Tương tự như một đối tượng như obj = {};ý muốn , khi được chuyển đến một chức năng đang chạy trong một cửa sổ khác, tức là (obj instanceof Object)===false. (Thậm chí tệ nhất, trong IE, nếu bạn giữ một tham chiếu đến obj sau khi cửa sổ của nó bị phá hủy hoặc điều hướng, cố gắng gọi nguyên mẫu đối tượng fns như obj.hasOwnProperty()sẽ ném lỗi!)
catch((err)=>{if (err === ENOENT)trả về ENOENT is not definedlỗi?
err instanceof Error