JavaScript 基础
JavaScript(ECMAScript)是 Web 页面与 Node.js 等运行时的脚本语言:在浏览器中操作 DOM、发起网络请求;在服务端处理 I/O。语法与 HTML、CSS 配合构成前端技术栈。
语言标准
| 名称 | 说明 |
|---|---|
| ECMAScript(ES) | 语言规范本身(语法、类型、内置对象) |
| JavaScript | 实现 ECMAScript 的语言产品名(浏览器引擎、Node.js) |
| 年度版本 | ES2015(ES6)、ES2016… 或 ES2020 等,对应规范年度修订 |
不存在官方的「ES7」简称规范名;查阅特性时请用具体年份或 MDN 条目。
运行环境
| 环境 | 全局对象 | 典型能力 |
|---|---|---|
| 浏览器 | globalThis(window) | DOM、BOM、fetch、Web API |
| Node.js | globalThis(global) | 文件系统、http、npm 模块 |
同一套 ECMAScript 语法,宿主 API(如 document、fs)由环境提供,不属于语言规范。
值与类型
原始类型(7 种)
undefined、null、boolean、number、bigint、string、symbol。
对象类型
除原始值外均为对象(含数组、函数、日期等)。函数是可调用的对象。
类型检测
| 方式 | 说明 |
|---|---|
typeof x | undefined / boolean / string / symbol / number / bigint / function;typeof null === 'object'(历史遗留) |
Array.isArray(x) | 判断数组 |
x === null | 判断 null |
Object.prototype.toString.call(x) | 精确内置标签,如 [object Date] |
严格模式
在文件或函数顶部写 'use strict'; 后:
- 未声明变量赋值抛
ReferenceError(禁止意外全局变量) delete不可删除变量eval不创建与外部共享的作用域(在严格eval中)- 禁止
with、八进制字面量等
模块(import/export)与 class 内部默认严格模式。
相等比较
| 运算符 | 行为 |
|---|---|
=== / !== | 严格相等:不转换类型,推荐默认使用 |
== / != | 抽象相等:会类型转换(如 '' == 0 为 true),易出错 |
Object.is(a, b) 与 === 类似,但 Object.is(NaN, NaN) 为 true,且区分 +0 / -0。
变量声明
| 关键字 | 作用域 | 重复声明 | 暂时性死区 |
|---|---|---|---|
var | 函数作用域 | 允许 | 无(提升为 undefined) |
let | 块级 | 禁止 | 有 |
const | 块级 | 禁止 | 有;须初始化,绑定不可改,对象内容仍可变 |
详见 执行模型与作用域。
常见语法要点
// 解构
const { name, age } = user;
const [first, ...rest] = list;
// 展开
const merged = { ...defaults, ...options };
const arr2 = [...arr1, 4];
// 可选链与空值合并
const city = user?.address?.city;
const port = config.port ?? 3000;
// 模板字符串
const msg = `Hello, ${name}!`;
// 箭头函数:无自身 arguments / this,适合回调
const double = (n) => n * 2;
模块(ESM)
浏览器与 Node.js(package.json 中 "type": "module" 或 .mjs)支持:
export const PI = 3.14;
import { PI } from "./constants.js";
工程化与 CommonJS 对比见 模块化与工程化。
学习路径(本目录)
| 顺序 | 文档 | 主题 |
|---|---|---|
| 1 | scope | 作用域、闭包、提升 |
| 2 | advanced | this、高阶函数 |
| 3 | prototype | 原型与 class |
| 4 | event-loop | 异步与事件循环 |
| 5 | map-set | 集合与 Symbol |
| 6 | proxy | Proxy / Reflect |
| 7 | error | 错误与调试 |
| 8 | dom-bom | 浏览器 API |
| 9 | performance | 性能优化 |
| 10 | safe | 安全 |
| 11 | design | 设计模式 |
| 12 | common | 模块与打包 |
| 13 | exec | 正则表达式 |
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| MDN:JavaScript 指南 | 中文入门 |
| MDN:JavaScript 参考 | 内置对象与语法 |
| ECMA-262 规范 | 官方语言规范(英文) |
| MDN:严格模式 | 'use strict' |
| MDN:相等比较 | === 与 Object.is |
相关文章
错误处理与调试
结构化错误类型、try/catch 与全局未捕获处理是健壮应用的基础。
浏览器相关 API
DOM 事件、存储、fetch、Worker、Observer 等由浏览器提供的 Web API(非 ECMAScript 核心)。HTML 结构见 标签。
性能优化
防抖/节流、渲染与内存、资源预加载及引擎行为是前端性能的主要抓手。相关 CSS 见 视觉效果、Head 资源提示。
模块化与工程化
ESM、CommonJS 与打包工具(Tree Shaking、代码分割)是前端工程化的基础。入门见 JavaScript 基础 · 模块。
执行模型与作用域
执行上下文与词法作用域决定变量在何处可访问、闭包如何形成,以及 var / let / const 的差异。语言概览见 JavaScript 基础。
数据结构与集合增强
Map / Set、WeakMap / WeakSet、数组高阶方法、TypedArray 与 Symbol 等扩展了内置数据结构能力。见 语言基础。