Skip to content

JavaScript编程

简介

JavaScript是一种高级、解释型的编程语言,最初设计用于为网页添加交互功能,如今已发展成为全栈开发语言。作为Web的核心技术之一,JavaScript能够运行在浏览器、服务器(Node.js)和各种设备上,是现代前端开发的基础。

语言基础

语法与数据类型

  • 基本语法与注释
  • 原始类型(String, Number, Boolean, null, undefined, Symbol, BigInt)
  • 引用类型(Object, Array, Function, Date, RegExp)
  • 类型转换与检测
  • 变量声明(var, let, const)

运算符与表达式

  • 算术、赋值、比较运算符
  • 逻辑运算符与短路求值
  • 条件(三元)运算符
  • 展开运算符与解构赋值
  • 可选链与空值合并

控制流

  • 条件语句(if-else, switch)
  • 循环语句(for, while, do-while, for...in, for...of)
  • 异常处理(try-catch-finally)
  • 跳转语句(break, continue, return)

函数与作用域

函数基础

  • 函数声明与表达式
  • 参数与返回值
  • 默认参数与剩余参数
  • 箭头函数
  • IIFE(立即调用函数表达式)

作用域与闭包

  • 全局作用域与函数作用域
  • 词法作用域与作用域链
  • 块级作用域(let, const)
  • 闭包原理与应用
  • 模块化模式

this与执行上下文

  • this绑定规则
  • call, apply, bind方法
  • 箭头函数中的this
  • 执行上下文与调用栈
  • 词法环境与变量环境

对象与原型

对象基础

  • 对象字面量与属性访问
  • 属性描述符与Object方法
  • 对象方法与计算属性
  • 对象的复制与合并
  • 对象解构与扩展

原型与继承

  • 原型链机制
  • 构造函数与new操作符
  • 原型继承模式
  • ES6 class语法糖
  • instanceof与原型检测

内置对象

  • Array方法与操作
  • String操作与正则表达式
  • Date与时间操作
  • Map, Set, WeakMap, WeakSet
  • JSON解析与序列化

异步编程

回调与事件

  • 回调函数模式
  • 事件监听与发布订阅
  • 回调地狱问题
  • 异步控制流库
  • 浏览器事件循环

Promise

  • Promise基本用法
  • Promise链与错误处理
  • Promise.all, Promise.race
  • Promise.allSettled, Promise.any
  • 自定义Promise实现

async/await

  • async函数与await表达式
  • 错误处理与try/catch
  • 串行与并行执行
  • 与Promise的配合
  • 性能考量与最佳实践

现代JavaScript特性

ES6+特性

  • 变量声明(let, const)
  • 模板字符串
  • 箭头函数
  • 解构赋值
  • 默认参数与剩余参数
  • 扩展运算符
  • 类与模块
  • 生成器与迭代器
  • 代理与反射

模块化

  • CommonJS规范
  • ESM模块系统
  • 动态导入
  • 模块解析与打包
  • 循环依赖处理

函数式编程

  • 纯函数与副作用
  • 高阶函数
  • 函数组合与管道
  • 不可变数据
  • 柯里化与偏应用

浏览器与DOM

DOM操作

  • 节点选择与遍历
  • 元素创建与修改
  • 属性与样式操作
  • 事件处理与委托
  • 表单与表单验证

BOM与Web API

  • Window与Document对象
  • 定时器(setTimeout, setInterval)
  • 存储(localStorage, sessionStorage)
  • Fetch API与网络请求
  • History API与路由

现代Web API

  • Intersection Observer
  • ResizeObserver
  • Web Workers
  • Service Workers
  • WebSockets
  • WebRTC
  • Canvas与WebGL

JavaScript工具与生态

开发工具

  • Babel转译
  • Webpack与模块打包
  • ESLint代码检查
  • Jest单元测试
  • TypeScript集成

性能优化

  • 代码分割与懒加载
  • 内存管理与垃圾回收
  • 防抖与节流
  • 事件循环优化
  • 渲染性能

安全考量

  • XSS与CSRF防御
  • 内容安全策略(CSP)
  • HTTPS与安全传输
  • 输入验证与过滤
  • 第三方库安全审计

代码示例

javascript
// 现代JavaScript特性示例

// 使用ES6+特性
const processUsers = async (userIds) => {
  try {
    // 使用Promise.all并行处理请求
    const userPromises = userIds.map(id => 
      fetch(`https://api.example.com/users/${id}`)
        .then(response => {
          if (!response.ok) {
            throw new Error(`Failed to fetch user ${id}`);
          }
          return response.json();
        })
    );
    
    // 等待所有请求完成
    const users = await Promise.all(userPromises);
    
    // 使用解构和箭头函数处理数据
    const processedUsers = users.map(({ id, name, email, ...rest }) => ({
      id,
      displayName: name.toUpperCase(),
      contact: email,
      // 使用可选链和空值合并操作符
      verified: rest.verified ?? false,
      lastLogin: rest.lastLogin?.date || 'Never',
    }));
    
    // 使用数组方法过滤和排序
    return processedUsers
      .filter(user => user.verified)
      .sort((a, b) => a.displayName.localeCompare(b.displayName));
      
  } catch (error) {
    console.error('Error processing users:', error);
    // 优雅地处理错误
    return [];
  }
};

// 使用类和模块
class UserManager {
  #users = new Map();
  
  constructor(initialUsers = []) {
    initialUsers.forEach(user => this.addUser(user));
  }
  
  addUser(user) {
    if (!user.id) throw new Error('User must have an id');
    this.#users.set(user.id, user);
    return this;
  }
  
  getUser(id) {
    return this.#users.get(id);
  }
  
  get userCount() {
    return this.#users.size;
  }
  
  *[Symbol.iterator]() {
    for (const user of this.#users.values()) {
      yield user;
    }
  }
}

// 使用事件委托
document.addEventListener('DOMContentLoaded', () => {
  const userList = document.querySelector('.user-list');
  
  userList?.addEventListener('click', (event) => {
    const userItem = event.target.closest('.user-item');
    if (!userItem) return;
    
    const userId = userItem.dataset.userId;
    if (userId) {
      // 使用动态导入加载模块
      import('./user-details.js')
        .then(module => {
          module.showUserDetails(userId);
        })
        .catch(error => {
          console.error('Failed to load user details module', error);
        });
    }
  });
});

用知识点燃技术的火山