|
|
ʾÀýJavaScriptµÄ try-catch-finally-throwÓ÷¨
- //🍎½»Á÷QQȺ711841924Ⱥһ£¬Æ»¹ûÄÚ²âȺ£¬528816639
- // AIWROKÈí¼þ - try-catch-finally-throw ÍêÕûÑÝʾʾÀý
- // È«ÃæÕ¹Ê¾JavaScript´íÎó´¦Àí»úÖÆµÄ¸÷ÖÖÓ÷¨
- printl("===== JavaScript try-catch-finally-throw ÍêÕûÑÝʾ¿ªÊ¼ =====");
- // =============================================================================
- // µÚÒ»²¿·Ö£º»ù´¡Ó÷¨ÑÝʾ
- // =============================================================================
- printl("\n¡¾ÑÝʾ1¡¿»ù´¡try-catchÓ÷¨");
- printl("----------------------------------------");
- try {
- printl("³¢ÊÔÖ´ÐпÉÄܳö´íµÄ´úÂë...");
- var result = 10 / 0;
- printl("¼ÆËã½á¹û: " + result);
- } catch (error) {
- printl("²¶»ñµ½´íÎó: " + error.message);
- } finally {
- printl("finally¿é×ÜÊÇ»áÖ´ÐУ¬ÎÞÂÛÊÇ·ñ·¢Éú´íÎó");
- }
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚ¶þ²¿·Ö£ºthrowÅ׳ö´íÎó
- // =============================================================================
- printl("\n¡¾ÑÝʾ2¡¿Ê¹ÓÃthrowÖ÷¶¯Å׳ö´íÎó");
- printl("----------------------------------------");
- function validateAge(age) {
- if (typeof age !== 'number') {
- throw new Error("ÄêÁ䱨ÐëÊÇÊý×ÖÀàÐÍ");
- }
- if (age < 0 || age > 150) {
- throw new Error("ÄêÁ䱨ÐëÔÚ0-150Ö®¼ä");
- }
- return true;
- }
- try {
- printl("ÑéÖ¤ÄêÁä: -5");
- validateAge(-5);
- printl("✅ Ñé֤ͨ¹ý");
- } catch (e) {
- printl("❌ Ñé֤ʧ°Ü: " + e.message);
- }
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚÈý²¿·Ö£º×Ô¶¨Òå´íÎóÀàÐÍ
- // =============================================================================
- printl("\n¡¾ÑÝʾ3¡¿´´½¨ºÍʹÓÃ×Ô¶¨Òå´íÎóÀàÐÍ");
- printl("----------------------------------------");
- // ¶¨Òå×Ô¶¨Òå´íÎóÀàÐÍ
- function ValidationError(message) {
- this.name = "ValidationError";
- this.message = message;
- }
- function DatabaseError(message) {
- this.name = "DatabaseError";
- this.message = message;
- }
- function NetworkError(message) {
- this.name = "NetworkError";
- this.message = message;
- }
- // ʹÓÃ×Ô¶¨Òå´íÎó
- function connectToServer(url) {
- if (!url || url === "") {
- throw new ValidationError("·þÎñÆ÷µØÖ·²»ÄÜΪ¿Õ");
- }
- if (url.indexOf("http") !== 0) {
- throw new NetworkError("URL¸ñʽ²»ÕýÈ·£¬±ØÐëÒÔhttp¿ªÍ·");
- }
- // Ä£ÄâÁ¬½Ó³É¹¦
- printl("Á¬½Óµ½: " + url);
- return true;
- }
- try {
- connectToServer("");
- } catch (e) {
- printl("´íÎóÀàÐÍ: " + e.name);
- printl("´íÎóÐÅÏ¢: " + e.message);
- }
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚËIJ¿·Ö£ºÇ¶Ì×try-catch
- // =============================================================================
- printl("\n¡¾ÑÝʾ4¡¿Ç¶Ì×try-catch½á¹¹");
- printl("----------------------------------------");
- function processNestedData(data) {
- try {
- printl("Íâ²ãtry: ¿ªÊ¼´¦ÀíÊý¾Ý");
-
- try {
- printl(" ÄÚ²ãtry: ÑéÖ¤Êý¾Ý¸ñʽ");
- if (!data || typeof data !== 'object') {
- throw new Error("Êý¾Ý¸ñʽÎÞЧ");
- }
- printl(" ✅ ÄÚ²ãÑé֤ͨ¹ý");
-
- } catch (innerError) {
- printl(" ❌ Äڲ㲶»ñ´íÎó: " + innerError.message);
- // ÔÚÄڲ㴦ÀíºóÖØÐÂÅ׳ö
- throw new Error("Êý¾Ý´¦Àíʧ°Ü: " + innerError.message);
- }
-
- printl("✅ Íâ²ã´¦Àí¼ÌÐø");
- return true;
-
- } catch (outerError) {
- printl("❌ Íâ²ã²¶»ñ´íÎó: " + outerError.message);
- return false;
- } finally {
- printl("Íâ²ãfinally: ÇåÀí×ÊÔ´");
- }
- }
- var testData = { name: "test", value: 123 };
- processNestedData(testData);
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚÎ岿·Ö£º¶àÖØcatch²¶»ñ²»Í¬ÀàÐÍ´íÎó
- // =============================================================================
- printl("\n¡¾ÑÝʾ5¡¿¶àÖØcatch´¦Àí²»Í¬´íÎóÀàÐÍ");
- printl("----------------------------------------");
- function performOperation(operationType) {
- if (operationType === "validation") {
- throw new ValidationError("Ñé֤ʧ°Ü");
- } else if (operationType === "database") {
- throw new DatabaseError("Êý¾Ý¿âÁ¬½Óʧ°Ü");
- } else if (operationType === "network") {
- throw new NetworkError("ÍøÂçÁ¬½Ó³¬Ê±");
- } else {
- throw new Error("δ֪²Ù×÷ÀàÐÍ");
- }
- }
- // ²âÊÔ²»Í¬µÄ´íÎóÀàÐÍ
- var operations = ["validation", "database", "network", "unknown"];
- for (var i = 0; i < operations.length; i++) {
- var op = operations[i];
- printl("\nÖ´ÐвÙ×÷: " + op);
-
- try {
- performOperation(op);
- } catch (e) {
- if (e instanceof ValidationError) {
- printl(" ¡ú ²¶»ñÑéÖ¤´íÎó: " + e.message);
- } else if (e instanceof DatabaseError) {
- printl(" ¡ú ²¶»ñÊý¾Ý¿â´íÎó: " + e.message);
- } else if (e instanceof NetworkError) {
- printl(" ¡ú ²¶»ñÍøÂç´íÎó: " + e.message);
- } else {
- printl(" ¡ú ²¶»ñÆäËû´íÎó: " + e.message);
- }
- }
-
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- }
- // =============================================================================
- // µÚÁù²¿·Ö£ºfinallyµÄʵ¼ÊÓ¦Óà - ×ÊÔ´ÇåÀí
- // =============================================================================
- printl("\n\n¡¾ÑÝʾ6¡¿finallyÓÃÓÚ×ÊÔ´ÇåÀí£¨Êµ¼ÊÓ¦Óó¡¾°£©");
- printl("----------------------------------------");
- // Ä£ÄâÎļþ²Ù×÷
- var fileHandle = null;
- function simulateFileOperation(filename, shouldFail) {
- try {
- printl("´ò¿ªÎļþ: " + filename);
- fileHandle = { name: filename, isOpen: true };
- printl("✅ ÎļþÒÑ´ò¿ª");
-
- if (shouldFail) {
- throw new Error("Îļþ¶Áȡʧ°Ü");
- }
-
- printl("¶ÁÈ¡ÎļþÄÚÈÝ...");
- printl("✅ Îļþ¶ÁÈ¡³É¹¦");
-
- return "ÎļþÄÚÈÝÊý¾Ý";
-
- } catch (e) {
- printl("❌ Îļþ²Ù×÷ʧ°Ü: " + e.message);
- return null;
-
- } finally {
- // ÎÞÂ۳ɹ¦Óë·ñ£¬¶¼Òª¹Ø±ÕÎļþ
- if (fileHandle && fileHandle.isOpen) {
- printl("¹Ø±ÕÎļþ: " + fileHandle.name);
- fileHandle.isOpen = false;
- fileHandle = null;
- printl("✅ ÎļþÒѹرգ¨×ÊÔ´ÇåÀíÍê³É£©");
- }
- }
- }
- // ²âÊԳɹ¦³¡¾°
- printl("\n--- ³¡¾°1: Îļþ¶ÁÈ¡³É¹¦ ---");
- simulateFileOperation("config.ini", false);
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // ²âÊÔʧ°Ü³¡¾°
- printl("\n--- ³¡¾°2: Îļþ¶Áȡʧ°Ü ---");
- simulateFileOperation("data.txt", true);
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚÆß²¿·Ö£º´íÎó´«²¥ºÍÖØÐÂÅ׳ö
- // =============================================================================
- printl("\n¡¾ÑÝʾ7¡¿´íÎó´«²¥ºÍÖØÐÂÅ׳ö");
- printl("----------------------------------------");
- function layer3() {
- printl(" [µÚ3²ã] Ö´Ðеײã²Ù×÷");
- throw new Error("µ×²ã²Ù×÷ʧ°Ü");
- }
- function layer2() {
- try {
- printl(" [µÚ2²ã] µ÷ÓõÚ3²ã");
- layer3();
- } catch (e) {
- printl(" [µÚ2²ã] ²¶»ñ´íÎó: " + e.message);
- // Ìí¼ÓÉÏÏÂÎÄÐÅÏ¢ºóÖØÐÂÅ׳ö
- throw new Error("µÚ2²ã´¦Àíʧ°Ü: " + e.message);
- }
- }
- function layer1() {
- try {
- printl("[µÚ1²ã] µ÷ÓõÚ2²ã");
- layer2();
- } catch (e) {
- printl("[µÚ1²ã] ²¶»ñ´íÎó: " + e.message);
- printl("[µÚ1²ã] ½øÐÐ×îÖÕ´¦Àí");
- }
- }
- layer1();
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚ°Ë²¿·Ö£ºÌõ¼þÐÔ´íÎó´¦Àí
- // =============================================================================
- printl("\n¡¾ÑÝʾ8¡¿Ìõ¼þÐÔ´íÎó´¦Àí");
- printl("----------------------------------------");
- function processWithFallback(value, fallbackValue) {
- var result = null;
- var usedFallback = false;
-
- try {
- printl("³¢ÊÔÖ÷Òª´¦Àí·½Ê½...");
-
- // Ä£Äâ¿ÉÄÜʧ°ÜµÄ²Ù×÷
- if (value === null || value === undefined) {
- throw new Error("ֵΪ¿Õ£¬ÎÞ·¨´¦Àí");
- }
-
- // Õý³£´¦Àí
- result = value * 2;
- printl("✅ Ö÷Òª´¦Àí³É¹¦: " + value + " * 2 = " + result);
-
- } catch (e) {
- printl("⚠️ Ö÷Òª´¦Àíʧ°Ü: " + e.message);
- printl("ʹÓñ¸Ó÷½°¸...");
-
- try {
- // ±¸Óô¦Àí
- result = fallbackValue;
- usedFallback = true;
- printl("✅ ±¸Óô¦Àí³É¹¦: " + result);
-
- } catch (fallbackError) {
- printl("❌ ±¸Óô¦ÀíҲʧ°Ü: " + fallbackError.message);
- result = 0;
- }
- } finally {
- printl("´¦ÀíÍê³É£¬Ê¹ÓÃÁ˱¸Ó÷½°¸: " + usedFallback);
- }
-
- return { result: result, usedFallback: usedFallback };
- }
- printl("\n²âÊÔ1: Õý³£Öµ");
- var res1 = processWithFallback(10, 100);
- printl("½á¹û: " + JSON.stringify(res1));
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- printl("\n²âÊÔ2: ¿ÕÖµ£¨´¥·¢±¸Ó÷½°¸£©");
- var res2 = processWithFallback(null, 100);
- printl("½á¹û: " + JSON.stringify(res2));
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚ¾Å²¿·Ö£ºÔÚÑ»·ÖÐʹÓÃtry-catch
- // =============================================================================
- printl("\n¡¾ÑÝʾ9¡¿ÔÚÑ»·ÖÐʹÓÃtry-catch");
- printl("----------------------------------------");
- var dataList = [
- { id: 1, value: 100 },
- { id: 2, value: null }, // »áµ¼Ö´íÎó
- { id: 3, value: 200 },
- { id: 4, value: undefined }, // »áµ¼Ö´íÎó
- { id: 5, value: 300 }
- ];
- var successCount = 0;
- var failCount = 0;
- var results = [];
- for (var i = 0; i < dataList.length; i++) {
- var item = dataList[i];
-
- try {
- printl("´¦ÀíÏîÄ¿ " + item.id + "...");
-
- if (item.value === null || item.value === undefined) {
- throw new Error("ÏîÄ¿ " + item.id + " µÄÖµÎÞЧ");
- }
-
- var processed = item.value * 1.1;
- results.push({ id: item.id, original: item.value, processed: processed });
- successCount++;
- printl(" ✅ ´¦Àí³É¹¦: " + item.value + " ¡ú " + processed);
-
- } catch (e) {
- failCount++;
- printl(" ❌ ´¦Àíʧ°Ü: " + e.message);
- results.push({ id: item.id, error: e.message });
- }
-
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- }
- printl("\nÑ»·´¦Àíͳ¼Æ:");
- printl(" ×ÜÊý: " + dataList.length);
- printl(" ³É¹¦: " + successCount);
- printl(" ʧ°Ü: " + failCount);
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚÊ®²¿·Ö£ºÒì²½²Ù×÷Ä£ÄâÖеĴíÎó´¦Àí
- // =============================================================================
- printl("\n¡¾ÑÝʾ10¡¿Ä£ÄâÒì²½²Ù×÷ÖеĴíÎó´¦Àí");
- printl("----------------------------------------");
- function simulateAsyncOperation(taskName, shouldSucceed) {
- printl("¿ªÊ¼Òì²½ÈÎÎñ: " + taskName);
-
- try {
- // Ä£ÄâÒì²½²Ù×÷µÄÑÓ³Ù
- printl(" ÈÎÎñÖ´ÐÐÖÐ...");
- sleep.second(0.5); // 0.5ÃëÑÓ³Ù
-
- if (!shouldSucceed) {
- throw new Error("ÈÎÎñ '" + taskName + "' Ö´ÐÐʧ°Ü");
- }
-
- printl(" ✅ ÈÎÎñÍê³É: " + taskName);
- return { task: taskName, status: "success" };
-
- } catch (e) {
- printl(" ❌ ÈÎÎñÒì³£: " + e.message);
- return { task: taskName, status: "failed", error: e.message };
-
- } finally {
- printl(" ÈÎÎñÇåÀíÍê³É: " + taskName);
- }
- }
- // Ö´Ðжà¸öÒì²½ÈÎÎñ
- var tasks = [
- { name: "ÏÂÔØÎļþ", succeed: true },
- { name: "½âÎöÊý¾Ý", succeed: false },
- { name: "±£´æ½á¹û", succeed: true },
- { name: "·¢ËÍ֪ͨ", succeed: true }
- ];
- var taskResults = [];
- for (var i = 0; i < tasks.length; i++) {
- var task = tasks[i];
- var result = simulateAsyncOperation(task.name, task.succeed);
- taskResults.push(result);
-
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- }
- printl("ËùÓÐÈÎÎñÖ´ÐÐÍê±Ï£¬½á¹û»ã×Ü:");
- for (var j = 0; j < taskResults.length; j++) {
- var r = taskResults[j];
- printl(" " + (j + 1) + ". " + r.task + ": " + r.status);
- }
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // µÚʮһ²¿·Ö£º×ÛºÏʵս°¸Àý - Êý¾Ýµ¼Èëϵͳ
- // =============================================================================
- printl("\n\n¡¾ÑÝʾ11¡¿×ÛºÏʵս°¸Àý - Êý¾Ýµ¼Èëϵͳ");
- printl("¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T");
- // Ä£ÄâµÄÊý¾ÝÔ´
- var dataSource = [
- { name: "ÕÅÈý", age: 25, email: "zhangsan@example.com" },
- { name: "ÀîËÄ", age: -5, email: "lisi@example.com" }, // ÄêÁäÎÞЧ
- { name: "", age: 30, email: "empty@example.com" }, // ÐÕÃûΪ¿Õ
- { name: "ÍõÎå", age: 28, email: "invalid-email" }, // ÓÊÏä¸ñʽ´íÎó
- { name: "ÕÔÁù", age: 35, email: "zhaoliu@example.com" }
- ];
- // ÑéÖ¤º¯Êý
- function validateRecord(record) {
- if (!record.name || record.name.trim() === "") {
- throw new ValidationError("ÐÕÃû²»ÄÜΪ¿Õ");
- }
- if (typeof record.age !== 'number' || record.age < 0 || record.age > 150) {
- throw new ValidationError("ÄêÁ䱨ÐëÔÚ0-150Ö®¼ä");
- }
- if (!record.email || record.email.indexOf('@') === -1) {
- throw new ValidationError("ÓÊÏä¸ñʽ²»ÕýÈ·");
- }
- return true;
- }
- // µ¼Èëµ¥¸ö¼Ç¼
- function importRecord(record, index) {
- var result = {
- index: index,
- success: false,
- message: "",
- data: null
- };
-
- try {
- printl("µ¼Èë¼Ç¼ " + (index + 1) + ": " + record.name);
-
- // ²½Öè1: ÑéÖ¤Êý¾Ý
- printl(" ²½Öè1: ÑéÖ¤Êý¾Ý");
- validateRecord(record);
- printl(" ✅ Êý¾ÝÑé֤ͨ¹ý");
-
- // ²½Öè2: ת»»Êý¾Ý
- printl(" ²½Öè2: ת»»Êý¾Ý¸ñʽ");
- var transformed = {
- id: index + 1,
- fullName: record.name.toUpperCase(),
- ageGroup: record.age < 18 ? "δ³ÉÄê" : (record.age < 60 ? "³ÉÄê" : "ÀÏÄê"),
- contact: record.email
- };
- printl(" ✅ Êý¾Ýת»»Íê³É");
-
- // ²½Öè3: ±£´æÊý¾Ý
- printl(" ²½Öè3: ±£´æµ½Êý¾Ý¿â");
- // Ä£Äâ±£´æ²Ù×÷
- printl(" ✅ Êý¾Ý±£´æ³É¹¦");
-
- result.success = true;
- result.message = "µ¼Èë³É¹¦";
- result.data = transformed;
-
- } catch (e) {
- printl(" ❌ µ¼Èëʧ°Ü: " + e.name + " - " + e.message);
- result.message = e.name + ": " + e.message;
-
- } finally {
- printl(" ¼Ç¼ " + (index + 1) + " ´¦ÀíÍê³É");
- }
-
- return result;
- }
- // ÅúÁ¿µ¼Èë
- function batchImport(dataList) {
- printl("\n¿ªÊ¼ÅúÁ¿Êý¾Ýµ¼Èë");
- printl("×ܼǼÊý: " + dataList.length);
- printl("----------------------------------------");
-
- var importResults = {
- total: dataList.length,
- success: 0,
- failed: 0,
- details: []
- };
-
- try {
- for (var i = 0; i < dataList.length; i++) {
- var record = dataList[i];
- var result = importRecord(record, i);
-
- importResults.details.push(result);
-
- if (result.success) {
- importResults.success++;
- } else {
- importResults.failed++;
- }
-
- sleep.second(0.3); // 0.3ÃëÑÓ³Ù
- }
-
- } catch (e) {
- printl("❌ ÅúÁ¿µ¼Èë¹ý³ÌÖз¢ÉúÑÏÖØ´íÎó: " + e.message);
-
- } finally {
- printl("========================================");
- printl("ÅúÁ¿µ¼ÈëÍê³Éͳ¼Æ:");
- printl(" ×ܼǼÊý: " + importResults.total);
- printl(" ³É¹¦: " + importResults.success);
- printl(" ʧ°Ü: " + importResults.failed);
- printl(" ³É¹¦ÂÊ: " + Math.round((importResults.success / importResults.total) * 100) + "%");
- printl("========================================");
- }
-
- return importResults;
- }
- // Ö´ÐÐÅúÁ¿µ¼Èë
- var finalResults = batchImport(dataSource);
- // ÏÔʾÏêϸ½á¹û
- printl("\nÏêϸµ¼Èë½á¹û:");
- for (var k = 0; k < finalResults.details.length; k++) {
- var detail = finalResults.details[k];
- var status = detail.success ? "✅" : "❌";
- printl(" " + status + " ¼Ç¼" + (detail.index + 1) + ": " + detail.message);
- }
- sleep.second(2); // 2Ãëµ¹¼ÆÊ±
- // =============================================================================
- // ½áÊø
- // =============================================================================
- printl("\n\n");
- printl("¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
- printl("¨U ¨U");
- printl("¨U try-catch-finally-throw ÑÝʾÍê³É ¨U");
- printl("¨U ¨U");
- printl("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");
- printl("\n===== JavaScript try-catch-finally-throw ÍêÕûÑÝʾ½áÊø =====");
¸´ÖÆ´úÂë
|
|