Skip to content

参考

基于现代 JavaScript(ES2025 · 核于 2026-06)

速查

  • 声明:默认 const,需重新赋值才 let,不用 varlet / const 块作用域 + TDZ
  • 8 种类型:7 原始(string / number / bigint / boolean / undefined / symbol / null)+ object
  • 相等:默认 ===== 只在 x == null 时偶用;Object.is 仅区分 ±0 / NaN 时用
  • falsy 共 8 个:false / 0 / -0 / 0n / "" / null / undefined / NaN
  • 转换:Number(x) / String(x) / Boolean(x)(不带 new);+x 转数字、!!x 转布尔
  • 现代运算符:?. / ?? / **(ES2016)/ &&= ||= ??=(ES2021)
  • 遍历:数组 for...of,对象 for...inObject.entries + for...of
  • 严格模式:module / class 默认开启;脚本顶部 "use strict";
  • 三大怪癖:typeof null === "object"NaN !== NaN、ASI(return 后勿换行)
  • 检测:数组 Array.isArray()NaNNumber.isNaN()null=== null

变量声明速查

特性varletconst
作用域函数 / 全局
提升后undefinedTDZTDZ
可重复声明
可重新赋值
必须初始化
建议不用需改时默认

8 种数据类型速查

类型typeof 结果备注
string"string"不可变
number"number"IEEE 754 双精度;Infinity / NaN
bigint"bigint"123n,不能与 number 混算(ES2020)
boolean"boolean"true / false
undefined"undefined"未赋值默认值
symbol"symbol"唯一标识(ES2015)
null"object" ← 坑判断用 === null
object"object" / "function"数组 / 函数 / 日期等

类型转换速查

输入Number(x)String(x)Boolean(x)
""0""false
" "0" "true
"12px"NaN"12px"true
"0"0"0"true
00"0"false
null0"null"false
undefinedNaN"undefined"false
[]0""true
[5]5"5"true
[1,2]NaN"1,2"true
{}NaN"[object Object]"true

四套相等算法速查

xy=====Object.isSameValueZero
NaNNaN
+0-0
nullundefined
0false
"0"0
""0
  • ===:日常默认 · Object.is:元编程 / 区分 ±0 · SameValueZero:Array.includes / Set / Map

运算符速查

类别运算符
算术+ - * / % **(ES2016,右结合)
一元+x(转数字)-x ++ -- ! ~ typeof
比较=== !==(优先)== !=(避免)< > <= >=
逻辑&& || !(返回操作数本身、短路)
空值??(仅 nullish 兜底)?.(可选链)(ES2020)
位运算& | ^ ~ << >> >>>(先转 32 位整数)
赋值= += ... &&= ||= ??=(ES2021)
其他? :(三元),(逗号)in instanceof delete

循环与遍历速查

写法遍历对象拿到用途
for索引次数已知
while / do...while条件循环(后者至少一次)
for...of可迭代对象数组 / 字符串 / Set / Map(数组首选)
for...in对象键名(含继承)对象(勿用于数组
Object.entries + for...of对象自身[键, 值]安全遍历对象自有属性
forEach / map / filter数组值(+索引)函数式遍历

严格模式收紧项速查

行为非严格严格
给未声明变量赋值创建全局变量ReferenceError
给只读 / 冻结属性赋值静默失败TypeError
删除不可删除属性静默失败TypeError
重复形参名允许SyntaxError
旧式八进制 0644允许SyntaxError(用 0o644
with 语句允许SyntaxError
普通调用的 this全局对象undefined
eval 变量泄漏到外层独立作用域

提醒:ES module 与 class默认严格,无需写 "use strict"

必背怪癖速查

  • typeof null === "object"(用 === null 判断)
  • NaN !== NaN(用 Number.isNaN() 检测)
  • 0.1 + 0.2 === 0.30000000000000004(浮点精度,比较用容差)
  • null == undefinedtrue,但 null === undefinedfalse
  • [] == ![]true(别用 ==
  • ASI:return 后换行返回 undefined;行首 ( / [ / ` 需防连句
  • "0" / [] / {} 都是 truthy

ES 版本特性对照(本叶涉及)

特性版本
let / constSymbolfor...of、模板字面量、Number.isNaNES2015(ES6)
指数运算符 **ES2016
指数赋值 **=ES2016
可选链 ?.、空值合并 ??BigIntES2020
逻辑赋值 &&= / ||= / ??=、数字分隔符 _ES2021

权威链接

标准 / 规范

指南 / 参考

兼容性 / 工具

相关页