Własna klasa błędu
Wyjątki i walidacja - JavaScript od podstaw: konsola (JavaScript)
Błąd to obiekt, więc można dziedziczyć po `Error`. `ValidationError` dokłada pole `field` (które pole formularza jest złe) i własną nazwę. W `catch` instrukcja `instanceof` rozróżnia rodzaje błędów: złe dane użytkownika pokazujemy spokojnie, a każdy inny błąd (np. pomyłkę w programie) rzucamy dalej (`throw e`), żeby nie zginął.
class ValidationError extends Error {
constructor(field, message) {
super(message);
this.name = 'ValidationError';
this.field = field;
}
}
function validateProduct(p) {
if (typeof p.name !== 'string' || p.name.trim() === '') {
throw new ValidationError('name', 'nazwa jest wymagana');
}
if (!(p.price > 0)) throw new ValidationError('price', 'cena musi być dodatnia');
return true;
}
const products = [{ name: 'Zeszyt', price: 4.5 }, { name: '', price: 3 }, { name: 'Pióro', price: -2 }, null];
for (const p of products) {
try {
validateProduct(p);
console.log('OK:', p.name);
} catch (e) {
if (e instanceof ValidationError) {
console.log(`Pole ${e.field}: ${e.message}`);
} else {
console.log('Inny błąd (', e.name, ') - w prawdziwym programie: throw e');
}
}
}Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.