JavaScript 学习指南(2025 版)
写在前面
新语法速览
以下是ECMAScript最新标准(截至2025年),快速了解以便查阅:
- ECMAScript 2024(ES15)
- ECMAScript 2023(ES14)
- ECMAScript 2022(ES13)
- ECMAScript 2021(ES12)
- ECMAScript 2020(ES11)
- ECMAScript 2019(ES10)
- ECMAScript 2018(ES9)
- ECMAScript 2017(ES8)
- ECMAScript 2016(ES7)
- ECMAScript 2015(ES6)
避免使用的语法
以下是历史遗留或不推荐的语法,建议使用现代替代方案:
var:使用let或const以避免作用域问题。eval/new Function:安全性和性能问题,推荐静态代码。with:易导致代码混乱,推荐显式属性访问。label:复杂且不必要,推荐结构化控制流。==:非严格相等可能导致意外行为,推荐===。
教材与资源
视频
- JavaScript in 2025: What's New?(假设2025年新视频,15min):介绍最新ES特性。
- JavaScript Full Course 2025(3h):从基础到高级,覆盖ES6+、异步和模块化。
- Node.js for Beginners(16min):Node.js运行环境和包管理。
- JavaScript Performance Tips(20min):优化技巧和常见陷阱。
教程
- 现代JavaScript教程:全面的JS学习资源。
- ES2025速览:最新ECMAScript提案和标准。
- MDN Web Docs:
书籍
- 《JavaScript权威指南(第8版)》(2024):全面深入,涵盖ES2023+。
- 《JavaScript高级程序设计(第5版)》(2025):实用开发指南,注重现代实践。
- 《你不知道的JavaScript(更新版)》(2023):深入语言底层机制。
扩展阅读
- JavaScript生态报告2024:最新工具和趋势。
- ECMAScript提案:跟踪ESNext特性。
- JavaScript历史:语言演变背景。
JavaScript生态
运行环境
包管理
- npm:默认包管理工具。
- pnpm:高效、节省磁盘空间,推荐使用。
- Bun:2025年新兴运行时和包管理器,性能优异。
- 常用工具:
开发工具
- VS Code插件:
- 兼容性检查:
- 包分析:
- BundlePhobia:检查包体积。
- npm trends:比较包流行度。
术语表
- JavaScript (JS):ECMAScript的具体实现,运行于浏览器和Node.js。
- ECMAScript (ES):JavaScript的标准规范。
- ES6/ES2015:引入箭头函数、类、模块等。
- ES2023+:新增记录/元组、管道操作符等(部分为提案)。
- ESNext:最新提案和实验性特性。
- Web API:浏览器提供的接口,如DOM、Fetch。
- JSON:基于JS语法的轻量数据格式。
- TypeScript (TS):带类型的JS超集。
- JSX/TSX:React的模板语法。
- Vanilla JS:原生JavaScript,无框架。
- ECMA-262:ECMAScript标准文档。
- TC39:负责ECMAScript标准的委员会。
Node.js安装与运行(Mac)
sh
# 安装Node.js(推荐使用fnm)
brew install fnm
fnm install 20 # 安装Node.js v20(2025年LTS版本)
# 安装pnpm
npm install -g pnpm
# 检查版本
node -v
pnpm -v
# 运行JS代码
node
> 1 + 1
> .exit
node script.js
# 切换Node版本
fnm use 18
fnm use 20
# 管理npm源
npm install -g nrm
nrm use taobaoJavaScript语言基础知识体系
语言特性
- 动态类型、弱类型。
- 基于原型的继承。
- 函数是一等公民,支持高阶函数。
- 单线程,基于事件循环(EventLoop)实现非阻塞。
- 高级语言,采用即时编译(JIT)。
基本语法
语法结构
- 分号(
;)可选,推荐省略(依赖ASI机制)。 - 注释:
//(单行),/* */(多行),支持JSDoc。 - 变量:
let(块级作用域),const(常量),避免var。 - 严格模式:
"use strict";(强制规范代码)。 - 示例:javascript
// JSDoc示例 /** @param {number} a */ function add(a, b) { return a + b; }
- 分号(
表达式与运算符
- 算术:
+,-,*,/,%,**。 - 逻辑:
&&,||,!,??(空值合并)。 - 比较:
===,!==,<,>,<=,>=。 - 赋值:
=,+=,||=,&&=,??=。 - 其他:
?.(可选链),typeof,instanceof,in,delete。 - 示例:javascript
let x = 5; x ??= 10; // x保持5 console.log(x?.toString()); // "5"
- 算术:
控制流
- 条件:
if,else,switch。 - 循环:
for,while,do while,for...of,for...in。 - 示例:javascript
for (const item of [1, 2, 3]) { console.log(item); // 1, 2, 3 }
- 条件:
错误处理
- 使用
try,catch,finally,throw。 - 示例:javascript
try { throw new Error("Something went wrong"); } catch (e) { console.error(e.message); }
- 使用
运行时
- 变量提升:仅
var和函数声明提升,let/const有暂时性死区。 - 短路求值:
&&和||在必要时停止执行。 - 垃圾回收:基于标记清除算法。
原始数据类型
- number:
42,3.14,NaN,Infinity。 - BigInt:
123n。 - string:
"hello", 支持模板字符串`x = ${x}`。 - boolean:
true,false。 - symbol:
Symbol('id')。 - null/undefined。
- 示例:javascript
const str = `Hello ${42}`; // "Hello 42" const sym = Symbol('unique');
引用类型
对象
- 创建:
{ a: 1 }。 - 访问:
obj.a,obj['a']。 - API:
Object.keys(),Object.assign(),Object.defineProperty()。 - 示例:javascript
const obj = { get x() { return 42; } }; console.log(obj.x); // 42
- 创建:
数组
- 创建:
[1, 2, 3]。 - API:
.map(),.filter(),.reduce(),.flat()。 - 示例:javascript
const arr = [1, 2, 3].map(x => x * 2); // [2, 4, 6]
- 创建:
函数
- 声明:
function fn() {}, 表达式:const fn = () => {}。 - 箭头函数:无
this和arguments绑定。 - 参数:支持默认值、解构、剩余参数。
- 示例:javascript
const sum = (a, b = 0, ...rest) => a + b + rest.reduce((s, x) => s + x, 0); console.log(sum(1, 2, 3, 4)); // 10
类
- 定义:
class MyClass { constructor() {} }。 - 继承:
extends,super。 - 私有字段:
#field。 - 示例:javascript
class Counter { #count = 0; increment() { return ++this.#count; } } const c = new Counter(); console.log(c.increment()); // 1
异步编程
Promise
- 创建:
new Promise((resolve, reject) => {})。 - API:
.then(),.catch(),Promise.all(),Promise.any()。 - 示例:javascript
Promise.resolve(42).then(v => console.log(v)); // 42
- 创建:
async/await
- 简化Promise使用,支持顶层
await(模块中)。 - 示例:javascript
async function fetchData() { return await Promise.resolve("data"); }
- 简化Promise使用,支持顶层
Generator
- 定义:
function* fn() { yield 1; }。 - 示例:javascript
function* gen() { yield* [1, 2, 3]; } for (const v of gen()) console.log(v); // 1, 2, 3
- 定义:
事件循环
- 微任务:Promise、async/await。
- 宏任务:
setTimeout,setInterval。
模块化
- ES模块:
import,export。 - 动态导入:
import()。 - 示例:javascript
export const add = (a, b) => a + b; import("./module.js").then(m => console.log(m.add(1, 2)));
JavaScript代码片段
ES5基础
javascript
// 变量与类型
var x = 42; // 避免使用var
console.log(typeof x); // "number"
// 字符串操作
const str = "hello " + "world";
console.log(str.split(" ")); // ["hello", "world"]
// 数组与对象
const arr = [1, 2, 3];
const obj = { a: 1, b: function() { return this.a; } };
console.log(arr.length, obj.b()); // 3, 1
// 函数与上下文
function greet(name) { return `Hi, ${name}`; }
console.log(greet.call(null, "Alice")); // "Hi, Alice"ES6+特性
javascript
// 块级作用域与解构
{
const [a, ...rest] = [1, 2, 3];
console.log(a, rest); // 1, [2, 3]
}
// 箭头函数与模板字符串
const greet = (name = "Guest") => `Hello, ${name}!`;
console.log(greet()); // "Hello, Guest!"
// 类与私有字段
class User {
#id = 0;
constructor(name) { this.name = name; }
getId() { return this.#id; }
}
const user = new User("Bob");
console.log(user.getId()); // 0ES2023+与实验性特性
javascript
// 空值合并与可选链
const data = { user: null };
console.log(data.user?.name ?? "Unknown"); // "Unknown"
// 逻辑赋值
let flag = false;
flag &&= true; // flag保持false
console.log(flag); // false
// BigInt
const big = 123456789n * 2n;
console.log(big); // 246913578n
// 记录与元组(实验性)
const tuple = #[1, 2, 3]; // 不可变
console.log(tuple[0]); // 1总结
JavaScript在2025年继续蓬勃发展,新增特性如记录/元组和管道操作符进一步提升了语言的表达力。通过掌握基础语法、现代特性、异步编程和模块化,您可以轻松应对Web开发需求。结合最新工具和资源,立即开始实践,探索JavaScript的无限可能!