Javascript 知识总结分享—— 重点 & 难点
Javascript 重点 & 难点
你好!欢迎来到白羊的个人前端开发知识学习总结分享——【Javascript 知识总结分享——重点 & 难点】。该文章和后续持续更新
另外,后续会持续分享前端开发的其他相关的知识总结等。
注意:由于本人的分享也是自己边学边做的笔记,若笔记内有错误内容或更优雅适合的写法方案,欢迎私信或评论留言互相学习
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();