Baseline Widely available
ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑÐнÑÑÑÑкÑÐ¸Ñ throw
позволÑÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð¸ÑклÑÑениÑ, опÑеделÑемÑе полÑзоваÑелем. ÐÑи ÑÑом вÑполнение ÑекÑÑей ÑÑнкÑии бÑÐ´ÐµÑ Ð¾ÑÑановлено (инÑÑÑÑкÑии поÑле throw
не бÑдÑÑ Ð²ÑполненÑ), и ÑпÑавление бÑÐ´ÐµÑ Ð¿ÐµÑедано в пеÑвÑй блок catch
в ÑÑеке вÑзовов. ÐÑли catch
блоков ÑÑеди вÑзваннÑÑ
ÑÑнкÑий неÑ, вÑполнение пÑогÑÐ°Ð¼Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑÑановлено.
throw вÑÑажение;
вÑÑажение
ÐпÑеделÑемое полÑзоваÑелем иÑклÑÑение.
ÐÑполÑзÑйÑе инÑÑÑÑкÑÐ¸Ñ throw Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑклÑÑениÑ. Ðогда Ð²Ñ Ð³ÐµÐ½ÐµÑиÑÑеÑе иÑклÑÑение (throw), вÑÑажение задаÑÑ Ð·Ð½Ð°Ñение иÑклÑÑениÑ. Ðаждое из ÑледÑÑÑÐ¸Ñ throw ÑоздаÑÑ Ð¸ÑклÑÑение:
throw "Error2"; // генеÑиÑÑÐµÑ Ð¸ÑклÑÑение, знаÑением коÑоÑого ÑвлÑеÑÑÑ ÑÑÑока
throw 42; // генеÑиÑÑÐµÑ Ð¸ÑклÑÑение, знаÑением коÑоÑого ÑвлÑеÑÑÑ ÑиÑло 42
throw true; // генеÑиÑÑÐµÑ Ð¸ÑклÑÑение, знаÑением коÑоÑого ÑвлÑеÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение true
Также ÑÑÐ¾Ð¸Ñ Ð¾ÑмеÑиÑÑ, ÑÑо на инÑÑÑÑкÑÐ¸Ñ throw
влиÑÐµÑ Ð°Ð²ÑомаÑиÑеÑÐºÐ°Ñ Ð²ÑÑавка ÑоÑки Ñ Ð·Ð°Ð¿ÑÑой (ASI). ÐоÑÑÐ¾Ð¼Ñ Ð½Ðµ допÑÑкаÑÑÑÑ ÑазÑÑÐ²Ñ ÑÑÑок Ð¼ÐµÐ¶Ð´Ñ Ð¸Ð½ÑÑÑÑкÑией throw
и вÑÑажением
.
Ðожно ÑказаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð² каÑеÑÑве иÑклÑÑениÑ. ÐаÑем можно полÑÑиÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð¸ доÑÑÑп ко вÑем его ÑвойÑÑвам в блоке catch. СледÑÑÑий пÑÐ¸Ð¼ÐµÑ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¾Ñибки, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ Ñип UserException, и иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии иÑклÑÑениÑ.
function UserException(message) {
this.message = message;
this.name = "ÐÑклÑÑение, опÑеделÑнное полÑзоваÑелем";
}
function getMonthName(mo) {
mo = mo - 1; // ÐÑжно ÑкоÑÑекÑиÑоваÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа ÑоглаÑно индекÑам маÑÑива (1 = Jan, 12 = Dec)
const months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
if (months[mo] !== undefined) return months[mo];
throw new UserException("ÐевеÑно Ñказан Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа");
}
let monthName;
try {
// statements to try
const myMonth = 15; // 15 наÑ
одиÑÑÑ Ð²Ð½Ðµ гÑÐ°Ð½Ð¸Ñ Ð¼Ð°ÑÑива, ÑÑо пÑиведÑÑ Ðº иÑклÑÑениÑ
monthName = getMonthName(myMonth);
} catch (e) {
monthName = "неизвеÑÑен";
logMyErrors(e.message, e.name); // пеÑедаÑм иÑклÑÑение в обÑабоÑÑик оÑибок
}
ÐÑимеÑ: ÐÑÑгой пÑÐ¸Ð¼ÐµÑ Ð³ÐµÐ½ÐµÑаÑии обÑекÑа в виде иÑклÑÑениÑ
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿ÑовеÑÑеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÑÑока, пеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ Ð² ÑÑнкÑиÑ, поÑÑовÑм индекÑом СШÐ. ÐÑли Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑй ÑоÑмаÑ, бÑÐ´ÐµÑ ÑгенеÑиÑовано иÑклÑÑение поÑÑедÑÑвом ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа, имеÑÑего Ñип ZipCodeFormatException
.
/*
* СоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ZipCode.
*
* ÐопÑÑÑимÑе ÑоÑмаÑÑ Ð¿Ð¾ÑÑового индекÑа:
* 12345
* 12345-6789
* 123456789
* 12345 6789
*
* ÐÑли аÑгÑменÑ, пеÑеданнÑй в конÑÑÑÑкÑÐ¾Ñ ZipCode не ÑовпадаеÑ
* ни Ñ Ð¾Ð´Ð½Ð¸Ð¼ из ÑÑиÑ
ÑоÑмаÑов, бÑÐ´ÐµÑ Ð±ÑоÑено иÑклÑÑение.
*/
function ZipCode(zip) {
zip = new String(zip);
const pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
if (pattern.test(zip)) {
// знаÑение поÑÑового индекÑа должно бÑÑÑ Ð¿ÐµÑвÑм Ñовпадением в ÑÑÑоке
this.value = zip.match(pattern)[0];
this.valueOf = function () {
return this.value;
};
this.toString = function () {
return String(this.value);
};
} else {
throw new ZipCodeFormatException(zip);
}
}
function ZipCodeFormatException(value) {
this.value = value;
this.message = "ÐоÑÑовÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑй ÑоÑмаÑ";
this.toString = function () {
return this.value + this.message;
};
}
/*
* ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑкÑипÑ, коÑоÑÑй пÑовеÑÑÐµÑ Ð·Ð½Ð°Ñение адÑеÑа
* Ð´Ð»Ñ Ð¡Ð¨Ð.
*/
const ZIPCODE_INVALID = -1;
const ZIPCODE_UNKNOWN_ERROR = -2;
function verifyZipCode(z) {
try {
z = new ZipCode(z);
} catch (e) {
return e instanceof ZipCodeFormatException
? ZIPCODE_INVALID
: IPCODE_UNKNOWN_ERROR;
}
return z;
}
a = verifyZipCode(95060); // веÑнÑÑ 95060
b = verifyZipCode(9560); // веÑнÑÑ -1
c = verifyZipCode("a"); // веÑнÑÑ -1
d = verifyZipCode("95060"); // веÑнÑÑ 95060
e = verifyZipCode("95060 1234"); // веÑнÑÑ 95060 1234
ÐÑимеÑ: ÐовÑоÑнÑй вÑбÑÐ¾Ñ Ð¸ÑклÑÑениÑ
Ðожно иÑполÑзоваÑÑ throw Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного вÑбÑоÑа иÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле Ñого, как оно бÑло поймано. Ð ÑледÑÑÑем пÑимеÑе ловиÑÑÑ Ð¸ÑклÑÑение Ñ ÑиÑловÑм знаÑением и делаеÑÑÑ Ð¿Ð¾Ð²ÑоÑнÑй вÑбÑоÑ, еÑли его знаÑение болÑÑе 50. ÐовÑоÑно вÑбÑоÑенное иÑклÑÑение пеÑедаÑÑÑÑ Ð´Ð°Ð»ÐµÐµ в вÑзÑваÑÑÑÑ ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ до веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ, коÑоÑÑй Ð²Ð¸Ð´Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ.
try {
throw n; // бÑоÑаем иÑклÑÑение Ñ ÑиÑловÑм знаÑением
} catch (e) {
if (e <= 50) {
// инÑÑÑÑкÑии Ð´Ð»Ñ Ð¾Ð±ÑабоÑки иÑклÑÑений Ñо знаÑениÑми в диапазоне 1-50
} else {
// необÑабоÑанное иÑклÑÑение, делаем повÑоÑнÑй вÑбÑоÑ
throw e;
}
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4