Saya percaya bahwa banyak alasan yang try..catch
jarang ada dalam JavaScript adalah karena bahasa tersebut memiliki toleransi yang cukup tinggi untuk kesalahan. Sebagian besar situasi dapat ditangani dengan menggunakan pemeriksaan kode, default yang baik, dan peristiwa asinkron. Dalam beberapa kasus, hanya menggunakan pola akan mencegah masalah:
function Foo() {
//this may or may not be called as a constructor!!
//could accidentally overwrite properties on window
}
function Bar() {
if (!(this instanceof Bar)) {
return new Bar();
}
//this will only work on Bar objects, and wont impact window
}
Beberapa masalah utama dalam bahasa lain yang menyebabkan pengecualian hanya tidak ada di JS. Pengecoran tipe tidak diperlukan sebagian besar waktu. Alih-alih, metode yang lebih disukai biasanya untuk memeriksa fitur (menjalankan antarmuka tertentu):
function doFoo(arg) {
if (arg.foo) {
arg.foo();
} else {
Bar.prototype.foo.call(arg);
}
}
Dengan penambahan async
/ await
ke bahasa, try..catch
menjadi lebih lazim. Menjanjikan sebagai bentuk asinkron try..catch
, masuk akal bahwa seseorang harus mengharapkan:
doSomething().then(
doSomethingWithResult,
doSomethingWithError
)
alih-alih ditulis sebagai:
try {
const result = await doSomething()
doSomethingWithResult(result)
} catch (e) {
doSomethingWithError(e)
}
While in java or *any other language* it is mandatory to have error handling...
- Tidak juga. Java, ya, tetapi ada banyak bahasa yang tidak memaksa try-catch (seperti C #).