大家好!
本人的分享也是自己边学边做的笔记,若笔记内有错误内容或更优雅适合的写法方案,欢迎私信或评论留言互相学习~
在开始前,推荐一款程序员都应该知道的好物——JNPF低代码开发
应用地址:https://www.jnpfsoft.com?csdn
开发语言:Java/.net
这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;采用微服务、前后端分离架构,集成了代码生成器,支持前后端业务代码生成,满足快速开发;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3,平台即可私有化部署,也支持 K8S 部署。
在 JNPF 中,至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端 UI 等组件,这种情况下我们避免了重复造轮子,已内置大量的成熟组件,选择合适的组件进行集成或二次开发复杂功能,即可自主开发一个属于自己的应用系统。
另外,后续会持续分享前端开发的其他相关的知识总结等,那么,我们开始吧~
1.Javascript 错误 - try 、throw、catch、finally
含义理解
try 语句测试代码块的错误。
catch 语句处理错误。
throw 语句创建自定义错误。
finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。
JavaScript 错误
当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误。
可能是语法错误,通常是程序员造成的编码错误或错别字。
可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。
可能是由于来自服务器或用户的错误输出而导致的错误。
当然,也可能是由于许多其他不可预知的因素。
JavaScript 抛出(throw)错误
当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。
描述这种情况的技术术语是:JavaScript 将 抛出一个错误。
JavaScript try 和 catch
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
语法
try { ... //异常的抛出 } catch(e) { ... //异常的捕获与处理 } finally { ... //结束处理 }
简单示例
//简单示例: try { // 可能会抛出错误的代码 const result = someFunction(); // 假设 someFunction 未定义 console.log(result); } catch (error) { // 捕获错误并处理 console.log("An error occurred: " + error); }
示例
在下面的例子中,我们故意在 try 块的代码中写了一个错字。
catch 块会捕捉到 try 块中的错误,并执行代码来处理它。
var txt=""; function message() { try { adddlert("Welcome guest!"); } catch(err) { txt="本页有一个错误。\n\n"; txt+="错误描述:" + err.message + "\n\n"; txt+="点击确定继续。\n\n"; alert(txt); } }
finally 语句
简单示例
//简单示例: try { // 可能会抛出错误的代码 console.log("Inside try block"); } catch (error) { // 捕获错误并处理 console.log("An error occurred: " + error); } finally { // 无论是否发生错误,都会执行的代码块 console.log("Finally block executed"); }
finally 语句不论之前的 try 和 catch 中是否产生异常都会执行该代码块。
示例
在下面的例子中,我们故意在 try 块的代码中写了一个错字。
catch 块会捕捉到 try 块中的错误,并执行代码来处理它。
function myFunction() { var message, x; message = document.getElementById("p01"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "值是空的"; if(isNaN(x)) throw "值不是一个数字"; x = Number(x); if(x > 10) throw "太大"; if(x < 5) throw "太小"; } catch(err) { message.innerHTML = "错误: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Throw 语句
简单示例
//简单示例: function divide(x, y) { if (y === 0) { throw new Error("Division by zero is not allowed"); } return x / y; } try { var result = divide(10, 0); console.log("Result: " + result); } catch (error) { console.log("An error occurred: " + error.message); }
throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
语法
throw exception
异常可以是 JavaScript 字符串、数字、逻辑值或对象。
示例:
本例检测输入变量的值。如果值是错误的,会抛出一个异常(错误)。catch 会捕捉到这个错误,并显示一段自定义的错误消息:
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "值为空"; if(isNaN(x)) throw "不是数字"; x = Number(x); if(x < 5) throw "太小"; if(x > 10) throw "太大"; } catch(err) { message.innerHTML = "错误: " + err; } }
请注意,如果 getElementById 函数出错,上面的例子也会抛出一个错误。
包含try、catch、throw、finally语句示例:
function divide(x, y) { try { if (y === 0) { throw "Division by zero is not allowed"; } return x / y; } catch (error) { console.log("Error: " + error); } finally { console.log("This will always be executed"); } } console.log(divide(6, 2)); // Output: 3 console.log(divide(6, 0)); // Output: Error: Division by zero is not allowed // This will always be executed
2.this【什么是 this 关键字】
含义
含义:this关键字指向当前函数的上下文对象。在全局上下文中,this指向全局对象(例如window对象)。在函数上下文中,this的值取决于函数的调用方式。如果函数作为对象的方法调用,则this指向该对象。如果函数作为普通函数调用,则this指向全局对象。
关于this 指向的几条规律:
- 在函数体中,非显示或隐式地简单调用函数时,在严格模式下,函数内的 this 会绑定到 undefined 上,在非严格模式下则会被绑定到全局对象 window/global 上。
- 一般使用 new 方法调用构造函数时,构造函数内的 this 会绑定到新创建的对象上。
- 一般通过 call / apply / bing 方法显示调用函数时,函数体内的 this 会绑定到指定参数的对象上。
- 一般通过上下文对象调用函数时,函数体内的 this 会绑定到该对象上。
- 在箭头函数中,this 的指向是由外层(函数或全局)作用域来决定的。
示例
1.在函数体中,非显示或隐式地简单调用函数时,在严格模式下,函数内的 this 会绑定到 undefined 上,示例:
"use strict"; function myFunction() { console.log(this); } myFunction(); // 输出为 undefined
2.在函数体中,非显示或隐式地简单调用函数时,在非严格模式下则会被绑定到全局对象 window/global 上,示例:
function myFunction() { console.log(this); } myFunction(); // 输出为全局对象 (window 或 global)
3.一般使用 new 方法调用构造函数时,构造函数内的 this 会绑定到新创建的对象上。示例:
function Person(name) { this.name = name; } const person1 = new Person('Alice'); console.log(person1.name); // 输出为 'Alice'
4.一般通过 call / apply / bing 方法显示调用函数时,函数体内的 this 会绑定到指定参数的对象上。示例:
const person1 = { name: 'Alice' }; function greeting() { console.log('Hello, ' + this.name); } greeting.call(person1); // 输出为 'Hello, Alice' greeting.apply(person1); // 输出为 'Hello, Alice' const boundGreeting = greeting.bind(person1); boundGreeting(); // 输出为 'Hello, Alice'
5.一般通过上下文对象调用函数时,函数体内的 this 会绑定到该对象上。示例:
const person = { name: 'Bob', greet: function() { console.log('Hello, ' + this.name); } }; person.greet(); // 输出为 'Hello, Bob'
6.在箭头函数中,this 的指向是由外层(函数或全局)作用域来决定的。示例:
function Person() { this.age = 0; setInterval(() => { this.age++; // this 指向 Person 对象 console.log(this.age); }, 1000); } var p = new Person();