一、JavaScript 简介
JavaScript 由 Brendan Eich 于 1995 年在 Netscape 用 10 天写成(这是它早期混乱设计的根源)。后由 ECMA 标准化为 ECMAScript(ES),目前主流是 ES2015 (ES6) 之后的版本。
它的运行环境:
- 浏览器:操作 DOM、发请求、做动画
- Node.js:服务端、CLI、构建工具
- Electron:桌面应用(VSCode、Discord)
- React Native / Hermes:移动端
- Deno / Bun:新一代 JS 运行时
二、核心特性
类型与变量
1 2 3 4 5 6 7 8 9 10 11 12 13
| typeof 42 typeof "hi" typeof true typeof undefined typeof null typeof Symbol() typeof 1n
var x = 1; let y = 2; const z = 3;
|
== vs ===
1 2 3 4 5 6 7
| 0 == '' 0 == '0' '' == '0' null == undefined null === undefined
|
三、ES6+ 关键特性
箭头函数
1 2 3 4 5 6 7 8 9 10
| const add = (a, b) => a + b;
class Timer { start() { setInterval(() => { console.log(this); }, 1000); } }
|
解构 + 展开
1 2 3
| const { name, age = 18 } = user; const [first, ...rest] = [1, 2, 3, 4]; const merged = { ...obj1, ...obj2 };
|
模板字符串
1 2 3 4
| const name = "Mike"; console.log(`Hello, ${name}!`); console.log(`Multi line`);
|
Promise + async/await
1 2 3 4 5 6 7 8 9 10 11
| async function fetchUser(id) { try { const res = await fetch(`/api/user/${id}`); return await res.json(); } catch (e) { console.error(e); } }
const [u1, u2] = await Promise.all([fetchUser(1), fetchUser(2)]);
|
模块化
1 2 3 4 5 6
| export const add = (a, b) => a + b; export default function sub(a, b) { return a - b; }
import sub, { add } from './math.js';
|
可选链 + 空值合并(ES2020)
1 2 3 4
| const city = user?.address?.city ?? 'Unknown';
const city = (user && user.address && user.address.city) || 'Unknown';
|
四、常见陷阱
| 陷阱 | 示例 | 解释 |
|---|
| 浮点精度 | 0.1 + 0.2 === 0.3 → false | IEEE 754 限制,用 BigDecimal 库 |
| NaN 自身不等 | NaN === NaN → false | 用 Number.isNaN(x) |
| 数组 sort 默认按字符串 | [10, 2, 1].sort() → [1, 10, 2] | 传比较函数 (a,b) => a-b |
| typeof null | → "object" | 历史遗留;判 null 用 x === null |
| forEach 不能 await | 串行变并行无序 | 用 for...of 或 Promise.all(arr.map(async)) |
| 变量提升 | console.log(x); var x=1; 不报错 | 用 let/const 替代 var |
| 对象比较 | {a:1} === {a:1} → false | 引用相等,不是结构相等 |
五、运行时与生态
浏览器 API
DOM、fetch、localStorage、WebSocket、Web Workers、Service Worker、IndexedDB…
Node.js
1 2
| node app.js npm install express
|
包管理器
| 工具 | 特点 |
|---|
| npm | 官方,慢但通用 |
| yarn | 早期 npm 替代品 |
| pnpm | 硬链接节省磁盘,monorepo 友好 |
| bun | 包管理 + 运行时 + 打包,速度快 |
框架(前端)
- React — 生态最大,Hooks 心智模型清晰
- Vue — 上手最快,模板 + 响应式
- Svelte — 编译时框架,运行时为 0
- Solid — 像 React 但用真正的细粒度响应式
六、TypeScript?
如果项目超过几千行,强烈建议上 TypeScript。它在 JavaScript 上加了类型系统,把”运行时报 undefined”提前到”编译时报错”,重构友好度提升一个量级。
现代前端基本默认 TS,纯 JS 多用于小脚本、原型验证。
参考