首页 » 网站建设 » phpurlencode中止技巧_21TypeScript缺点处理

phpurlencode中止技巧_21TypeScript缺点处理

访客 2024-11-30 0

扫一扫用手机浏览

文章目录 [+]

try { ...} catch { ...}

如果 try 块中的代码产生缺点,则中断实行,然后跳到 catch 块中连续实行。
如果 try 块中代码没有非常,则不会实行 catch 块中的代码。

try/catch/finally 语句的语法格式:

phpurlencode中止技巧_21TypeScript缺点处理

try { ...} catch { ...} finally { ...}

finally 块中的代码是一定会实行的。

phpurlencode中止技巧_21TypeScript缺点处理
(图片来自网络侵删)

如:

let a: any = nulltry { console.log('开始') console.log(a.name);} catch { console.log('非常')} finally { console.log('末了')}

输出:

开始非常末了

如果 finally 块中有 return 语句,就会导致 try 和 catch 块中的 return 语句不起浸染,只有 finally 语句中的 return 语句有效。
如:

function demo(): number { try { return 0; } catch { return 1; } finally { return 2; }}console.log(demo());

输出:

212.2非常工具

当抛出非常时,程序会产生一个非常工具,该工具的属性:

name - 非常名称message - 非常的描述信息

在 catch 关键字后面可以声明这个工具参数,然后在代码中可以利用该工具,语法格式:

...catch (参数名) {...}...

如:

let a: any = nulltry { console.log('开始') console.log(a.name);} catch (error) { console.log('非常') console.log(error.name); console.log(error.message);} finally { console.log('末了');}

输出:

开始非常TypeErrorCannot read properties of null (reading 'name')末了12.3TypeScript 内置非常工具12.3.1RangeError

RangeError 工具可用来表示输入的数值超出范围。
如:

try { const n = 1.2345; console.log(n.toFixed(1000));} catch (err) { console.log(err instanceof RangeError);}

以上程序会输出true,由于数值的toFixed方法的第一个参数只能是0 ~ 20的数值,若为负数或是超过20(或超过20太多),就会抛出RangeError工具。

我们也可以自己 new 一个RangeError工具来抛出,RangeError的布局函数可传入一个字符串作为缺点描述。
如:

function discount(price: number, percentage: number): number { if (percentage >= 0 && percentage <= 100) { return price (1 - percentage / 100); } else { throw new RangeError("The form of the percentage needs to be from 0 to 100."); }} try { console.log(discount(100, 20)); console.log(discount(100, 999));} catch (err) { console.log(err);}

输出:

RangeError: The form of the percentage needs to be from 0 to 100. at discount (index.js:7:15) at Object.<anonymous> (index.js:12:17) at Module._compile (internal/modules/cjs/loader.js:774:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10) at Module.load (internal/modules/cjs/loader.js:641:32) at Function.Module._load (internal/modules/cjs/loader.js:556:12) at Function.Module.runMain (internal/modules/cjs/loader.js:837:10) at internal/main/run_main_module.js:17:11

RangeError工具除了有输出我们传入其布局函数作为参数的The form of the percentage needs to be from 0 to 100.字符串外,还有输出RangeError工具被抛出的位置,以及干系的堆栈解开(stack unwinding)信息。
(只不过这边输出的位置是指JavaScript程序的位置,并不是TypeScript程序。
)

也便是说,throw关键字该当要只管即便利用JavaScript内置的专门用来被抛出的工具。

12.3.2ReferenceError

造孽引用导致的缺点。
当我们在 JavaScript 中利用 JavaScript 不认识的名称时,就会抛出这个工具。
当然,由于我们是用 TypeScrip t来开拓 JavaScript 程序,这个状况并不会常常碰着。
如:

declare const n: number; try { console.log(n);} catch (err) { console.log(err instanceof ReferenceError);}

以上程序会输出true,由于程序第一行只是在 TypeScript中假声明出n这个常数。
以是程序第四行要访问n时会抛出ReferenceError工具。

12.3.3SyntaxError

语法缺点。
JavaScript 内置的eval函数有一个参数,可以将 JavaScript 代码作为字符串传入,如此一来就能够在程序运行阶段动态地产生并运行JavaScript代码。
如:

try { const result = eval(` function addOne(x) { return x + 1; } addOne(1); `); console.log(result);} catch (err) { console.log(err instanceof SyntaxError);}

以上程序会输出2。

当传进eval函数的字符串内的JavaScript的语法有缺点时,就会抛出这个例外。
如:

try { const result = eval(` function addOne(x) { return x + 1; addOne(1); `); console.log(result);} catch (err) { console.log(err instanceof SyntaxError);}

以上程序会输出true,由于我们把addOne函数的结尾大括号}删除了。

12.3.4TypeError

类型缺点。

如果f是一个函数,则f()阐述可以调用它,但如果f不是一个函数,此时用f()考试测验调用它的话,就会抛出TypeError工具;如果T是一个种别或是函数,则new T()阐述可以创建其工具实体,但如果T不是一个种别或是函数,此时用new T()阐述考试测验创建其工具实体的话,就会抛出TypeError工具。
当然,由于我们是用 TypeScript 来开拓 JavaScript 程序,这个状况并不会常常碰着。
如:

const T = { f1: 1, f2: "2",}; try { console.log(new (T as any)());} catch (err) { console.log(err instanceof TypeError);}

以上程序会输出true,由于工具T只是大括号工具,无法直接被 new 出工具实体。

12.3.5URIError

encodeURI() 或 decodeURI() 等函数实行缺点。

JavaScript内置的encodeURI和decodeURI函数可以用来安全地编码与解码URI。

用法如下:

const originalURL = "https://magiclen.org/中文"; const encodedURL = encodeURI(originalURL); console.log(encodedURL); const decodedURL = decodeURI(encodedURL); console.log(decodedURL);

以上程序的输出结果如下:

https://magiclen.org/%E4%B8%AD%E6%96%87https://magiclen.org/中文

如果只是要编码或解码URI的个中一个部件(component),可以利用JavaScript内置的encodeURIComponent或decodeURIComponent函数。

用法如下:

const originalURLComponent = "中文"; const encodedURLComponent = encodeURIComponent(originalURLComponent); console.log(encodedURLComponent); const decodedURLComponent = decodeURIComponent(encodedURLComponent); console.log(decodedURLComponent);

以上程序的输出结果如下:

%E4%B8%AD%E6%96%87中文

在利用encodeURI、decodeURI、encodeURIComponent或decodeURIComponent函数时,若输入的参数有误(非精确格式的URI),就会抛出URIError工具。
如:

try { console.log(encodeURI("\uD800"));} catch (err) { console.log(err instanceof URIError);} try { console.log(decodeURI("%"));} catch (err) { console.log(err instanceof URIError);} try { console.log(encodeURIComponent("\uD800"));} catch (err) { console.log(err instanceof URIError);} try { console.log(decodeURIComponent("%"));} catch (err) { console.log(err instanceof URIError);}

输出:

truetruetruetrue

JavaScript无法编码含有\uD800 ~ \uDFFF字符的字符串。
而\u是JavaScript的字符表示办法,其后可以接上2个字节长度的16进制数值,作为这个字符的字符值。
其余还有\x,可以接上1个字节长度的16进制数值。

12.3.6Error

上面先容的RangeError、ReferenceError、SyntaxError、TypeError、URIError都继续自Error。
我们可以把任何不属于上述缺点的缺点都用Error工具来表示。

Error的布局函数可传入一个字符串作为缺点描述。
如:

try { throw new Error("Something wrong!");} catch (err) { console.log(err);}

输出:

Something wrong!

在实际项目中,一样平常会根据非常工具,针对性地进行处理,如:

try { ...} catch (err) { if (err instanceof ReferanceError) { ...... } else if (err instanceof TypeError) { ...... } ......}12.4抛出非常

在 TypeScript 中,可以通过 throw 关键字抛出非常,语法如下:

throw 非常工具

可以通过布局函数实例化新的非常工具。
语法格式:

new 非常工具(自定义缺点信息);

抛出Error干系工具时不该用new关键字:RangeError、ReferenceError、SyntaxError、TypeError、URIError和Error除了可以被 new 出工具实体之外,也可以直接用调用函数的办法来让它们回传自己的工具实体。
如:

try { throw Error("Something wrong!");} catch (err) { console.log(err);}12.5自定义非常

除了利用内置非常外,还可以通过继续内置非常类型创建自定义非常类型。
自定义非常类型须要供应 name 和 message 两个属性。
如:

class CustomError extends Error { constructor(message: string) { super(message); this.name = 'Custom Error'; this.message = message; }}

然后在代码中可以抛出这个自定义非常,如:

try { throw new CustomError('出错了!');} catch (error: any) { console.log(error instanceof CustomError); console.log(`Error: ${error.name} - ${error.message}`);}

标签:

相关文章

PHP实现文字转图片的代码与应用

图片处理技术在各个领域得到了广泛应用。在PHP编程中,文字转图片功能同样具有很高的实用价值。本文将针对PHP实现文字转图片的代码进...

网站建设 2025-03-02 阅读1 评论0

NAN0017探索新型纳米材料的奥秘与应用

纳米技术作为一门新兴的交叉学科,近年来在材料科学、生物医学、电子工程等领域取得了举世瞩目的成果。其中,NAN0017作为一种新型纳...

网站建设 2025-03-02 阅读5 评论0

L26368XO代码其背后的创新与突破

编程语言在各个领域发挥着越来越重要的作用。在众多编程语言中,L26368XO代码以其独特的优势,成为了业界关注的焦点。本文将深入剖...

网站建设 2025-03-02 阅读1 评论0

HTML字体背景打造个化网页设计的关键元素

网页设计已经成为现代网络传播的重要手段。在众多网页设计元素中,字体和背景的搭配尤为关键。本文将从HTML字体背景设置的角度,探讨其...

网站建设 2025-03-02 阅读1 评论0