Dalam JS sepertinya tidak mungkin untuk memeriksa apakah argumen yang dilewatkan ke suatu fungsi sebenarnya dari jenis 'kesalahan' atau contoh dari Kesalahan.
Misalnya, ini tidak valid:
typeof err === 'error'
karena hanya ada 6 jenis yang mungkin (dalam bentuk string):
Typeof operator mengembalikan informasi tipe sebagai string. Ada enam kemungkinan nilai yang typeofmengembalikan:
"number", "string", "boolean", "object", "function" dan "undefined".
Tetapi bagaimana jika saya memiliki use case sederhana seperti ini:
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);
}
}
jadi apa cara terbaik untuk menentukan apakah argumen adalah turunan dari Kesalahan?
adalah instanceofoperator bantuan?
errmemasukkan (katakanlah) iframe, tetapi kemudian meneruskannya ke jendela induk untuk diserahkan, Anda akan mendapatkannya (err instanceof Error) === false. Itu karena iframe dan jendela induknya memiliki Errorprototipe objek yang berbeda . Demikian pula objek seperti obj = {};kehendak, ketika diteruskan ke fungsi yang berjalan di jendela yang berbeda, yeild (obj instanceof Object)===false. (Bahkan yang terburuk, di IE, jika Anda menyimpan referensi ke obj setelah jendelanya dihancurkan atau dinavigasi, mencoba memanggil prototipe objek fns seperti obj.hasOwnProperty()akan melempar kesalahan!)
catch((err)=>{if (err === ENOENT)mengembalikan ENOENT is not definedkesalahan?
err instanceof Error