JavaScript 笔记
函数参数
默认参数
在 JavaScript 中,我们可以为函数的参数设置默认值。如果调用函数时没有传递参数,那么参数将使用默认值。
function greet(name = 'World') {
console.log(`Hello, ${name}!`);
}
greet(); // 输出:Hello, World!
greet('Alice'); // 输出:Hello, Alice!
Rest 参数
Rest 参数允许我们将不确定数量的参数表示为一个数组。
function sum(...numbers) {
let total = 0;
for (let number of numbers) {
total += number;
}
return total;
}
console.log(sum(1, 2, 3)); // 输出:6
console.log(sum(4, 5)); // 输出:9
console.log(sum(6)); // 输出:6
面向对象
JavaScript 是一种面向对象的语言,它支持通过构造函数和原型来创建对象。
构造函数
构造函数允许我们创建具有相同属性和方法的对象实例。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}. I'm ${this.age} years old.`);
};
const person1 = new Person('Alice', 25);
const person2 = new Person('Bob', 30);
person1.greet(); // 输出:Hello, my name is Alice. I'm 25 years old.
person2.greet(); // 输出:Hello, my name is Bob. I'm 30 years old.
类
ES6 引入了 class
关键字,使得创建类更加简洁和直观。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name}. I'm ${this.age} years old.`);
}
}
const person1 = new Person('Alice', 25);
const person2 = new Person('Bob', 30);
person1.greet(); // 输出:Hello, my name is Alice. I'm 25 years old.
person2.greet(); // 输出:Hello, my name is Bob. I'm 30 years old.
装饰器
装饰器是一种语法,可以修改类、方法、属性等的行为。它是 JavaScript 中的一项实验性功能,并需要使用 Babel 等工具进行转译。
function log(target, name, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Calling ${name} with arguments: ${args.join(', ')}`);
return originalMethod.apply(this, args);
};
return descriptor;
}
class Calculator {
@log
add(a, b) {
return a + b;
}
}
const calculator = new Calculator();
console.log(calculator.add(2, 3)); // 输出:Calling add with arguments: 2, 3
// 5
高级函数
JavaScript 中的高级函数可以接受其他函数作为参数或返回函数。
高阶函数
高阶函数是指接受一个或多个函数作为参数,并/或者返回一个函数的函数。
function applyOperation(a, b, operation) {
return operation(a, b);
}
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
console.log(applyOperation(2, 3, add)); // 输出:5
console.log(applyOperation(2, 3, subtract)); // 输出:-1
匿名函数和箭头函数
匿名函数是没有具名标识符的函数,我们可以将其作为参数传递给其他函数或直接调用。
箭头函数是一种匿名函数的简写形式,并且它的行为与普通函数略有不同。箭头函数没有自己的 this
,而是继承外部作用域的 this
值。
const multiply = function(a, b) {
return a * b;
};
const divide = (a, b) => a / b;
console.log(multiply(2, 3)); // 输出:6
console.log(divide(6, 2)); // 输出:3
捕获异常
在 JavaScript 中,我们可以使用 try...catch
语句来捕获和处理异常。
try {
// 可能会抛出异常的代码
throw new Error('Something went wrong!');
} catch (error) {
// 捕获并处理异常
console.error(`Error: ${error.message}`);
}
通过使用 try...catch
块,我们可以在程序出现异常时执行特定的操作并提供更友好的错误处理。