第二章:JavaScript基础回顾

作者:Administrator 发布时间: 2026-03-13 阅读量:1 评论数:0

第二章:JavaScript基础回顾

2.1 变量与数据类型

变量声明

// var - 函数作用域,可重复声明(不推荐)
var name = '张三';
var name = '李四';  // 可以重复声明
​
// let - 块级作用域,不可重复声明(推荐)
let age = 25;
// let age = 30;  // 错误:不能重复声明
age = 30;  // 可以重新赋值
​
// const - 常量,不可重新赋值
const PI = 3.14159;
// PI = 3.14;  // 错误:不能重新赋值
​
// const对象可以修改属性
const person = { name: '张三' };
person.name = '李四';  // 可以
// person = {};  // 错误:不能重新赋值

数据类型

// 基本类型
let str = 'Hello';           // 字符串
let num = 100;               // 数字
let float = 3.14;            // 浮点数
let bool = true;             // 布尔
let nothing = null;          // 空
let notDefined = undefined;  // 未定义
let sym = Symbol('id');      // 符号
​
// 引用类型
let obj = { name: '张三', age: 25 };  // 对象
let arr = [1, 2, 3, 4, 5];           // 数组
let fn = function() {};              // 函数
​
// 检查类型
console.log(typeof str);     // string
console.log(typeof num);     // number
console.log(typeof bool);    // boolean
console.log(typeof obj);     // object
console.log(typeof arr);     // object(数组也是对象)
console.log(typeof fn);      // function
console.log(Array.isArray(arr));  // true

2.2 运算符

// 算术运算符
let a = 10, b = 3;
console.log(a + b);   // 13
console.log(a - b);   // 7
console.log(a * b);   // 30
console.log(a / b);   // 3.333...
console.log(a % b);   // 1(取余)
console.log(a ** b);  // 1000(幂运算)
​
// 比较运算符
console.log(a == b);   // false(相等,会类型转换)
console.log(a === b);  // false(全等,推荐)
console.log(a != b);   // true(不等)
console.log(a !== b);  // true(不全等)
console.log(a > b);    // true
console.log(a >= b);   // true
​
// 逻辑运算符
let x = true, y = false;
console.log(x && y);   // false(与)
console.log(x || y);   // true(或)
console.log(!x);       // false(非)
​
// 空值合并运算符
let value = null ?? '默认值';
console.log(value);    // '默认值'
​
// 可选链运算符
let user = { profile: { name: '张三' } };
console.log(user?.profile?.name);     // '张三'
console.log(user?.settings?.theme);   // undefined(不会报错)

2.3 控制流程

条件语句

// if-else
let score = 85;
if (score >= 90) {
    console.log('优秀');
} else if (score >= 80) {
    console.log('良好');
} else if (score >= 60) {
    console.log('及格');
} else {
    console.log('不及格');
}
​
// 三元运算符
let result = score >= 60 ? '及格' : '不及格';
​
// switch
let day = 1;
switch (day) {
    case 1:
        console.log('星期一');
        break;
    case 2:
        console.log('星期二');
        break;
    case 3:
    case 4:
    case 5:
        console.log('工作日');
        break;
    default:
        console.log('周末');
}

循环

// for循环
for (let i = 0; i < 5; i++) {
    console.log(i);
}
​
// while循环
let n = 0;
while (n < 5) {
    console.log(n);
    n++;
}
​
// do-while循环
let m = 0;
do {
    console.log(m);
    m++;
} while (m < 5);
​
// for...of(遍历可迭代对象)
let arr = ['a', 'b', 'c'];
for (let item of arr) {
    console.log(item);
}
​
// for...in(遍历对象属性)
let obj = { name: '张三', age: 25 };
for (let key in obj) {
    console.log(key, obj[key]);
}
​
// 数组方法遍历
arr.forEach((item, index) => {
    console.log(index, item);
});
​
// map遍历
let newArr = arr.map(item => item.toUpperCase());
​
// filter过滤
let numbers = [1, 2, 3, 4, 5];
let evens = numbers.filter(n => n % 2 === 0);
​
// find查找
let found = numbers.find(n => n > 3);
​
// reduce归约
let sum = numbers.reduce((acc, n) => acc + n, 0);

2.4 函数

函数声明

// 函数声明
function greet(name) {
    return `Hello, ${name}!`;
}
​
// 函数表达式
const sayHi = function(name) {
    return `Hi, ${name}!`;
};
​
// 箭头函数(推荐)
const add = (a, b) => a + b;
const square = x => x * x;
const greet2 = name => `Hello, ${name}!`;
​
// 多行箭头函数
const calculate = (a, b) => {
    const sum = a + b;
    const product = a * b;
    return { sum, product };
};
​
// 默认参数
function greetUser(name = '访客') {
    console.log(`欢迎, ${name}!`);
}
​
// 剩余参数
function sumAll(...numbers) {
    return numbers.reduce((a, b) => a + b, 0);
}
console.log(sumAll(1, 2, 3, 4));  // 10
​
// 解构参数
function printUser({ name, age }) {
    console.log(`${name}, ${age}岁`);
}
printUser({ name: '张三', age: 25 });

高阶函数

// 函数作为参数
function operate(a, b, operation) {
    return operation(a, b);
}
​
const result = operate(5, 3, (x, y) => x + y);
console.log(result);  // 8
​
// 函数作为返回值
function createMultiplier(factor) {
    return function(number) {
        return number * factor;
    };
}
​
const double = createMultiplier(2);
const triple = createMultiplier(3);
console.log(double(5));  // 10
console.log(triple(5));  // 15
​
// 闭包
function counter() {
    let count = 0;
    return {
        increment: () => ++count,
        decrement: () => --count,
        getCount: () => count
    };
}
​
const myCounter = counter();
console.log(myCounter.increment());  // 1
console.log(myCounter.increment());  // 2
console.log(myCounter.getCount());   // 2

2.5 对象与类

对象

// 对象字面量
const person = {
    name: '张三',
    age: 25,
    greet() {
        console.log(`我是${this.name}`);
    }
};
​
// 访问属性
console.log(person.name);      // 张三
console.log(person['age']);    // 25
person.greet();                // 我是张三
​
// 解构
const { name, age } = person;
​
// 展开运算符
const person2 = { ...person, city: '北京' };
​
// Object方法
console.log(Object.keys(person));    // ['name', 'age', 'greet']
console.log(Object.values(person));  // ['张三', 25, ƒ]
console.log(Object.entries(person)); // [['name', '张三'], ...]

// 类定义
class Animal {
    constructor(name) {
        this.name = name;
    }
    
    speak() {
        console.log(`${this.name}发出声音`);
    }
    
    // 静态方法
    static isAnimal(obj) {
        return obj instanceof Animal;
    }
}

// 继承
class Dog extends Animal {
    constructor(name, breed) {
        super(name);
        this.breed = breed;
    }
    
    speak() {
        console.log(`${this.name}: 汪汪!`);
    }
    
    fetch() {
        console.log(`${this.name}去捡球`);
    }
}

const dog = new Dog('旺财', '金毛');
dog.speak();   // 旺财: 汪汪!
dog.fetch();   // 旺财去捡球

2.6 数组操作

const arr = [1, 2, 3, 4, 5];

// 添加删除
arr.push(6);        // 末尾添加
arr.pop();          // 末尾删除
arr.unshift(0);     // 开头添加
arr.shift();        // 开头删除
arr.splice(2, 1);   // 从索引2删除1个
arr.splice(2, 0, 'a', 'b');  // 从索引2插入

// 查找
arr.indexOf(3);     // 索引
arr.includes(3);    // 是否包含
arr.find(x => x > 3);       // 第一个满足条件的
arr.findIndex(x => x > 3);  // 第一个满足条件的索引

// 切片
arr.slice(1, 3);    // [2, 3](不改变原数组)

// 排序
arr.sort((a, b) => a - b);  // 升序
arr.reverse();      // 反转

// 连接
const arr2 = [6, 7, 8];
const combined = arr.concat(arr2);
const spread = [...arr, ...arr2];

// 其他方法
arr.join('-');      // '1-2-3-4-5'
arr.every(x => x > 0);  // 是否都满足
arr.some(x => x > 4);   // 是否有满足的

2.7 字符串操作

let str = 'Hello, World!';

// 长度
str.length;  // 13

// 查找
str.indexOf('World');   // 7
str.includes('World');  // true
str.startsWith('Hello'); // true
str.endsWith('!');       // true

// 截取
str.slice(0, 5);     // 'Hello'
str.substring(0, 5); // 'Hello'
str.substr(7, 5);    // 'World'

// 替换
str.replace('World', 'Node.js');  // 'Hello, Node.js!'
str.replace(/o/g, '0');           // 正则替换所有

// 分割
str.split(', ');     // ['Hello', 'World!']

// 大小写
str.toUpperCase();   // 'HELLO, WORLD!'
str.toLowerCase();   // 'hello, world!'

// 去除空白
'  hello  '.trim();      // 'hello'
'  hello  '.trimStart();  // 'hello  '
'  hello  '.trimEnd();    // '  hello'

// 模板字符串
const name = '张三';
const message = `你好, ${name}!
今天是${new Date().toLocaleDateString()}`;

评论