FORMA

JavaScript 基础

JavaScript(ECMAScript)是 Web 页面与 Node.js 等运行时的脚本语言:在浏览器中操作 DOM、发起网络请求;在服务端处理 I/O。语法与 HTMLCSS 配合构成前端技术栈。

语言标准

名称说明
ECMAScript(ES)语言规范本身(语法、类型、内置对象)
JavaScript实现 ECMAScript 的语言产品名(浏览器引擎、Node.js)
年度版本ES2015(ES6)、ES2016… 或 ES2020 等,对应规范年度修订

不存在官方的「ES7」简称规范名;查阅特性时请用具体年份或 MDN 条目。

运行环境

环境全局对象典型能力
浏览器globalThiswindowDOM、BOM、fetch、Web API
Node.jsglobalThisglobal文件系统、http、npm 模块

同一套 ECMAScript 语法,宿主 API(如 documentfs)由环境提供,不属于语言规范。

值与类型

原始类型(7 种)

undefinednullbooleannumberbigintstringsymbol

对象类型

除原始值外均为对象(含数组、函数、日期等)。函数是可调用的对象。

类型检测

方式说明
typeof xundefined / boolean / string / symbol / number / bigint / functiontypeof 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 内部默认严格模式。

相等比较

运算符行为
=== / !==严格相等:不转换类型,推荐默认使用
== / !=抽象相等:会类型转换(如 '' == 0true),易出错

Object.is(a, b)=== 类似,但 Object.is(NaN, NaN)true,且区分 +0 / -0

变量声明

关键字作用域重复声明暂时性死区
var函数作用域允许无(提升为 undefined
let块级禁止
const块级禁止有;须初始化,绑定不可改,对象内容仍可变

详见 执行模型与作用域

常见语法要点

js
// 解构
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)支持:

js
export const PI = 3.14;
import { PI } from "./constants.js";

工程化与 CommonJS 对比见 模块化与工程化

学习路径(本目录)

顺序文档主题
1scope作用域、闭包、提升
2advancedthis、高阶函数
3prototype原型与 class
4event-loop异步与事件循环
5map-set集合与 Symbol
6proxyProxy / Reflect
7error错误与调试
8dom-bom浏览器 API
9performance性能优化
10safe安全
11design设计模式
12common模块与打包
13exec正则表达式

参考文献

以下链接在编写时均可正常访问:

资料说明
MDN:JavaScript 指南中文入门
MDN:JavaScript 参考内置对象与语法
ECMA-262 规范官方语言规范(英文)
MDN:严格模式'use strict'
MDN:相等比较===Object.is

Series

js

2 / 14