JavaScript チートシート — クイックリファレンス
モダン JavaScript(ES2022)の構文、標準ライブラリ、よく使う DOM / Node ヘルパーをまとめたチートシート。日常の約 80% をカバーします。
JavaScript ES2022
ECMAScript · マルチパラダイム · 動的・弱い型付け
おすすめの学習パス
まず「Hello World と実行環境」(Node.js またはブラウザコンソール)を通す → 変数・型・制御フローに慣れる → 配列とオブジェクトの高階メソッドを習得 → 参照とコピー、関数とクロージャを理解 → 非同期(Promise / async / await)を重点学習 → 最後に必要に応じて DOM、ネットワーク fetch、Node モジュール、ビルドとデバッグを参照。FAQ は落とし穴回避の振り返りに最適です。
1.Hello World と実行環境
Node.js またはブラウザで JavaScript を実行し、スクリプト・モジュール・npm プロジェクトの構造を理解します。
console 出力
console.log でコンソールに出力します。console.error はエラー出力、console.table は表形式表示。ブラウザと Node の両方で使えます。
Node で実行
node で .js ファイルを直接実行します。node -e でインライン式を評価、node -p で結果を表示。ブラウザ依存がない場合に首选です。
ブラウザの script
HTML は <script> で JS を読み込みます。defer は DOM 解析後に遅延実行、async は非同期読み込み。type="module" で ESM が有効になります。
コマンドライン引数
Node では process.argv に完全なコマンドラインが入ります:argv[0] が node、argv[1] がスクリプトパス、argv[2] 以降が引数です。
npm init
npm init で package.json を作成します。npm install で依存をインストールし、node_modules とロックファイルを生成します。
package.json
package.json はプロジェクトを記述します:name / version、main エントリ、scripts コマンド、dependencies 依存関係。
ES Modules
import / export でモジュール化します:export で公開、import で取り込み。package.json に type: module を設定するか .mjs 拡張子を使います。
strict モード
'use strict' で strict モードを有効化します:暗黙のグローバルを禁止し、無音エラーを例外化します。ESM は自動で strict モードです。
2.変数と定数
let / const 宣言、スコープ、動的型付け、分割代入、テンプレート文字列。
let と const
let は再代入可能な変数、const は再代入不可能な定数(オブジェクト自体は可変)を宣言します。どちらもブロックスコープです。const を優先し、再代入が必要なら let を使います。
var と let の違い
var は関数スコープ+ホイスト、let / const はブロックスコープです。モダンコードでは let / const を使い、var の罠を避けます。
スコープ
ブロックスコープ {}、関数スコープ、グローバルスコープ。内側のスコープは外側の変数を参照できますが、その逆はできません。
動的型付け
JS の変数には型の制約がなく、同一変数に任意の値を代入できます。typeof で実行時の型を判定します。
分割代入
配列やオブジェクトから値を変数に取り出します。オブジェクトは名前で、配列は位置で対応付け。デフォルト値やネストも可能です。
命名規則
変数・関数は lowerCamelCase、定数は UPPER_SNAKE_CASE、クラス・コンポーネントは UpperCamelCase を使う。真偽値変数には is / has 接頭辞を付ける。
ホイスト
var 宣言と関数宣言はスコープの先頭にホイストされます。let / const には TDZ(一時的デッドゾーン)があり、宣言前に参照するとエラーになります。
テンプレート文字列
バッククォート文字列は ${} の埋め込みと複数行に対応します。文字列連結や複数行テキストの首选で、+ 連結を避けられます。
3.データ型
プリミティブ型、オブジェクト、typeof 判定、型変換。
プリミティブ型
プリミティブ型は 7 種類:string、number、boolean、null、undefined、symbol、bigint。それ以外はすべて object です。
数値と NaN
number は整数と浮動小数を兼用します。NaN は非数、Infinity は無限大。NaN は自分自身を含め、どの値とも等しくありません。
文字列
文字列は不変です。長さ length、インデックス [i]、メソッド toUpperCase / slice / split などを使います。文字エンコーディングは UTF-16 です。
真値と偽値
偽値:false、0、''、null、undefined、NaN。それ以外はすべて真値です。if の判定は真偽値への暗黙変換で行われます。
null と undefined
undefined は未定義 / 未代入、null は明示的な空値を意味します。存在しないプロパティへアクセスすると undefined が返ります。
Symbol と BigInt
Symbol は一意な識別子(オブジェクトのプライベートキーに最適)、BigInt は末尾に n を付けた任意精度整数です。typeof はそれぞれを区別します。
typeof 判定
typeof はプリミティブ型を判定できます。配列・Date・null はすべて 'object' を返すため、別の方法で区別する必要があります。
型変換
明示的な変換:String() / Number() / Boolean()。暗黙の変換はバグの温床です:+ は連結、- は数値変換。
オブジェクト型
プリミティブ以外はすべてオブジェクト:通常のオブジェクト、配列、関数、Date、Map など。オブジェクトは参照型です。
4.参照とコピー
値渡し vs 参照渡し、浅いコピーと深いコピー、配列とオブジェクトの参照、GC。
値渡し vs 参照渡し
プリミティブは値渡し(コピー)、オブジェクト・配列・関数は参照渡し(共有)です。これは JS の最も重要なメンタルモデルです。
オブジェクト参照
関数の引数:オブジェクト引数は同じオブジェクトを共有するため、関数内で変更すると外側も変わります。プリミティブは影響を受けません。
浅いコピー
スプレッド構文 {...obj} / [...arr] や Object.assign で 1 階層のコピーが作れます。ネストしたオブジェクトはまだ参照を共有します。
深いコピー
深いコピーは全階層を再帰的に複製します。structuredClone(モダン)か自前の再帰コピーを使用。関数や循環参照は特別な対応が必要です。
配列のコピー
[...arr] は浅いコピー、slice() もコピー、Array.from は変換。ネストした配列(多次元)はまだ浅いコピーです。
JSON シリアライズによるコピー
JSON.stringify / parse は簡単なディープコピーですが、undefined・関数・Symbol を落とし、循環参照も扱えません。
ガベージコレクション
V8 は到達不能なオブジェクトを自動で回収します。ローカル変数は関数終了時に解放されます。グローバルやクロージャが捕捉した変数は寿命を延ばします。
オブジェクトの等価比較
=== はオブジェクトに対しては参照を比較するため、内容が同じ 2 つのオブジェクトでも等しくありません。フィールド単位の比較は手動のディープイコールが必要です。
5.制御フロー
if / else、ループ、switch、三項演算子、論理短絡。
if / else
if / else は条件に応じて分岐します。条件は真偽値に暗黙変換されます。else-if チェーンで複数分岐できます。
三項演算子
cond ? a : b でワンライナー条件代入。ネスト三項は可読性が落ちるため、複雑なロジックでは if / switch を使います。
for ループ
古典的な for はインデックスを使います。コレクションの多くは for...of や配列メソッドの方が簡潔です。
for...of
for...of はイテラブル(配列、文字列、Map / Set、NodeList)を反復します。インデックスは不要です。
for...in(オブジェクト)
for...in はオブジェクトの列挙可能キー(継承含む)を反復します。配列は for...of、オブジェクトキーは Object.keys を使います。
while / do-while
while は判定後に実行、do-while は最低 1 回実行します。反復回数が未定の場合に使います。
switch
switch は厳密等価(===)で比較します。case 一致後、break まで実行が流れ落ちます(フォールスルー)に注意してください。
論理短絡とオプショナル連鎖
&&、||、?? は短絡評価です。?. は安全なオプショナル連鎖、?? は null / undefined のときだけ既定値を使います。
break と continue
continue で現在の反復をスキップ、break でループを抜け、ラベル付き break / continue でネストしたループを制御します。
6.関数とクロージャ
関数宣言、アロー関数、引数、クロージャ、this、コールバック。
関数宣言と関数式
関数宣言はホイストされ、関数式はされません。アロー関数は関数式でより簡潔。三者の構文は異なります。
アロー関数
アロー関数は簡潔で、自前の this / arguments を持ちません。コンストラクタにはなれません。単一式は暗黙的に return されます。
引数とデフォルト値
関数の引数にはデフォルト値を設定でき、rest で残りを集められます。arguments は配列風でアロー関数には存在しません。
クロージャ
クロージャは生成時のスコープを覚えます。内側の関数は外側の変数を参照でき、外側の関数が戻った後も有効です。
this の束縛
this は呼び出し時に決まります:オブジェクトのメソッドはそのオブジェクト、通常関数の非 strict モードではグローバル、アロー関数は外側の this を継承します。
call / apply / bind
call / apply は即時呼び出しで this を指定し、bind は this を束縛した新しい関数を返します。apply は配列で引数を渡します。
コールバック関数
コールバックは関数を非同期処理の引数として渡すことです。モダンコードでは Promise / async が首选です。多重ネストはコールバック地獄になります。
IIFE(即時実行)
IIFE(function(){})() は即時実行され、スコープを隔離します。モダンコードではブロックスコープ {} やモジュールで代替します。
再帰
関数が自身を呼ぶには基底条件が必要です。なければスタックオーバーフローします。末尾呼び出し最適化は多くの JS エンジンで完全には実装されていません。
7.文字列処理
文字列メソッド、テンプレート文字列、正規表現マッチ、分割と文字処理。
よく使うメソッド
よく使うメソッド:length で長さ、slice / substring で切り出し、indexOf で検索、includes で包含判定、replace で置換、split で分割、trim で空白除去。
大小文字とエンコード
toUpperCase / toLowerCase で大小文字を変換します。charCodeAt はコードユニット取得、fromCharCode は逆変換、localeCompare はロケール順で比較します。
Unicode 処理
文字列は UTF-16 コードユニットの列で、絵文字など補助平面の文字は 2 ユニットを占めます。反復は for...of か Array.from を使います。
テンプレート文字列で連結
テンプレート文字列の ${} 埋め込みと複数行が最も推奨されます。式やメソッド呼び出しもネストできます。
正規表現の基本
正規表現リテラル /pattern/ または new RegExp を使います。test で判定、exec で取得。g はグローバル、i は大小無視。
正規表現による置換
replace は正規表現で置換し、$1 でグループを参照できます。コールバックで複雑な処理も可能。replaceAll はリテラルをすべて置換します。
分割と連結
split は区切りで配列に分割し、join は配列を文字列に連結します。split('') は文字に分解します。空文字列の挙動に注意してください。
数値を文字列に変換
toString / テンプレートで文字列化、toFixed で小数桁、toLocaleString で桁区切り、padStart でゼロパディング。
8.配列とオブジェクト
配列の高階関数、Map / Set、オブジェクト操作、分割代入。
配列の高階メソッド
map で写像、filter で抽出、reduce で畳み込み、find で検索、some / every で判定。元の配列は変更しません。
Map
Map は任意の値をキーにできるマップ:get / set / has / delete / size。キーはオブジェクトでもよく、反復は挿入順を保ちます。
Set
Set は重複を許さないコレクション:add / has / delete / size。配列の重複除去やメンバー判定に首选です。
オブジェクト操作
Object.keys / values / entries で反復、Object.assign でマージ、Object.freeze で凍結、in でプロパティ判定。
reduce
reduce は配列を単一の値に畳み込みます:集計、グループ化、フラット化。初期値は任意ですが、指定が推奨です。
ソート
sort はデフォルトで文字列順(罠)です。数値ソートは比較関数が必要です。sort は配列をインプレースに変更します。
スプレッドとマージ
スプレッド演算子 ... は配列 / オブジェクトのマージ、コピー、引数の展開に使います。rest で収集、spread で展開はミラーです。
メソッドチェーン
map / filter などは新しい配列を返すためチェーンできます。長いチェーンでは中間配列の割り当てに注意してください。
配列の穴と疎配列
配列の穴(hole)は undefined と異なります。map は穴をスキップします。密な配列は Array.from または fill で作ります。
9.メモリとパフォーマンス
クロージャとメモリリーク、WeakMap / WeakSet、大量データ処理と最適化。
クロージャとメモリ
クロージャは不要になった外部変数も参照し続けます。長寿命の参照は GC を妨げます。
イベントリスナーのリーク
DOM 要素を除去してもリスナーが残ったり、リスナーが外部オブジェクトを保持することでリークします。要素除去前にデタッチするか AbortController を使います。
WeakMap / WeakSet
WeakMap のキーは弱参照で、他に参照がなければ回収されます。関連データ、キャッシュ、プライベートフィールドに適しています。
パフォーマンス最適化
不要なコピーや再計算を避けます。length をローカルへキャッシュ、DOM 操作をバッチ化、高頻度イベントは debounce / throttle。
スタックオーバーフロー
無限再帰や深すぎる再帰は RangeError: Maximum call stack を引き起こします。ループに変えるか深さを制限します。
大量データの処理
大きな配列に reduce / map を全適用するとメモリを消費します。バッチ処理、ジェネレータでの遅延評価、TypedArray でのバイナリ最適化を使います。
GC とグローバルオブジェクト
グローバル変数やキャッシュは解放されません。無制限なキャッシュを避け、適切に掃除します。V8 のマーク&スイープが処理します。
メモ化キャッシュ
Map で純関数の結果をキャッシュし、同じ入力ならキャッシュを返して高コストな再計算を避けます。キャッシュのサイズに注意してください。
10.オブジェクト指向
class 構文、継承、カプセル化、静的メンバー、プロトタイプチェーン。
class 定義
class はオブジェクトの雛形を定義します:コンストラクタ、メソッド、プロパティ。new でインスタンスを生成します。
継承(extends)
extends で継承し、super() で親コンストラクタ、super.method() で親メソッドを呼び出します。
getter / setter
get / set はアクセサプロパティを定義し、読み書き時にロジック(バリデーションなど)を実行します。メソッドではなくプロパティとしてアクセスします。
静的メンバー
static メンバーはクラスに属し、インスタンスには属しません:静的メソッドはユーティリティ、静的フィールドは定数。static {} は静的初期化ブロックです。
プライベートフィールド
# 接頭辞は真のプライベートフィールド / メソッドを定義し、クラス外からアクセスするとエラーになります。アンダースコア命名ではなく本物のカプセル化です。
instanceof 判定
instanceof はオブジェクトがクラス(またはその親)のプロトタイプチェーン上にあるか判定します。Object.getPrototypeOf でプロトタイプを確認できます。
プロトタイプチェーン
オブジェクトはプロトタイプチェーンでメソッドを共有します。class はプロトタイプ継承のシンタックスシュガーです。prototype を変更すると全インスタンスに影響します。
継承より合成
深い継承階層は保守が困難です。オブジェクト合成を優先:コンストラクタで依存を注入、mixin で機能をブレンド。
11.例外処理
try / catch / finally、エラー型、throw、非同期エラー処理。
try / catch / finally
try には失敗しうるコードを入れ、catch で受け取り、finally は成否に関わらず実行されます。例外は呼び出しスタックを遡って伝播します。
エラー型
Error が基底で、サブクラスに TypeError、ReferenceError、RangeError、SyntaxError があります。instanceof で区別します。
エラーを投げる
throw new Error('msg') で例外を投げます。何でも投げられますが、慣例ではスタックを持つ Error オブジェクトを使います。
カスタムエラー
extends Error で業務エラーを定義します。name を設定して識別しやすくし、message とスタックを保持します。
非同期エラー
Promise / async のエラーは .catch または try / catch(await 内)で処理します。同期 try / catch では非同期の throw を捕捉できません。
未処理エラー
.catch がない Promise は unhandledrejection を引き起こします。最上位で uncaughtException / unhandledrejection をグローバル監視します。
エラーの分離
バッチ処理では 1 件の失敗で全体を止めてはいけません。各要素を try / catch で包み、ログを残して継続します。
エラーの原因 cause
ES2022 で追加された Error の cause オプションは、エラーをラップしても原因とスタックを保持し、層ごとの追跡を容易にします。
12.ファイルと IO
Node のファイルシステム、コンソール入力、JSON 読み書き、ブラウザ DOM の IO。
fs でファイルを読む
Node の fs/promises でファイルを読みます:readFile は一括読み込み、readFileSync は同期版。モダンでは Promise 版を推奨します。
fs で書き込みと追記
writeFile は上書き、appendFile は追記、mkdir はディレクトリ作成、access は存在確認。rename / cp / rm でファイル操作を行います。
JSON ファイルの読み書き
JSON ファイルの読み込みは parse、書き出しは stringify。JSON は設定やデータの保存によく使われます。
標準入出力
process.stdin で入力(ストリーム)を読み、readline で対話的に 1 行ずつ処理、process.stdout.write で出力します。
fetch ネットワーク IO
fetch でリモートリソースを取得します。async / await でレスポンスを扱い、res.json() / res.text() で解析。Node 18+ に内蔵。
ブラウザ DOM の IO
DOM はページ内容を読み書きします:getElementById で取得、textContent はテキスト、innerHTML はマークアップ。ブラウザ環境専用です。
ストリーム IO
大きなファイルはストリームでメモリ全体を一度に読み込まないようにします。createReadStream / createWriteStream、pipe または for await を使います。
path のパス処理
node:path はファイルパスを扱います:join で連結、resolve で絶対パス化、extname で拡張子、basename でファイル名を取得。
13.よくある落とし穴(FAQ)
JS 開発者が最もハマる罠:== vs ===、this、非同期、コピー、真値判定。
== と ===
== は暗黙変換を行い(バグのもと)、=== は厳密等価です。原則として === を使います。null == undefined のみ例外です。
this の喪失
メソッドを変数に代入したりコールバックに渡すと this が失われます。アロー関数で継承するか bind で明示的に束縛します。
浮動小数点の精度
0.1 + 0.2 !== 0.3(二進表現で不正確)。比較は許容誤差で行い、金額は整数セントか専用ライブラリで扱います。
非同期の実行順序
setTimeout やネットワークリクエストは非同期です。ソース順に書いても実行順は保証されません。await / Promise を使います。
浅いコピーと深いコピー
スプレッドは 1 階層しかコピーしません。ネストしたオブジェクトは共有されるため、変更すると元にも影響します。
真値判定
空配列 / 空オブジェクトは真値です。配列の長さは .length で、オブジェクトは Object.keys(obj).length で確認します。
var のスコープ漏れ
var にはブロックスコープがないため、ループ / if 内の宣言は関数スコープに漏れます。ループカウンタには let を使います。
parseInt の落とし穴
古いエンジンでは parseInt('08') が 8 進扱いになることも、parseInt('3px') は 3 を返します。厳密には Number か + を使います。
ネスト三項演算子
ネストした三項演算子は読みにくいです。複雑な分岐は if / else かルックアップマップで書きましょう。
オブジェクトプロパティの変更
分割代入は浅いコピーで、ネストしたプロパティは参照のままです。元オブジェクトを変更から守るにはディープコピーが必要です。
14.非同期とイベントループ
イベントループ、Promise、async / await、タイマー、並行処理。
イベントループ
JS はシングルスレッド + イベントループです。同期コードが先に実行され、非同期コールバック(タイマー / IO)はタスクキューに入ります。
Promise
Promise は非同期の結果を表します。then が成功、catch が失敗、finally が後処理。チェーンでコールバック地獄を避けられます。
async / await
async 関数は Promise を返し、await で結果を待ちます。同期的に書けて、try / catch で非同期エラーを捕捉できます。
タイマー
setTimeout は遅延実行、setInterval は周期実行、clearTimeout / clearInterval でキャンセルします。単位はミリ秒です。
Promise の組み合わせ
Promise.all は全部成功で成功、allSettled は全完了後に各状態を報告、race は最初に完了したもので決着します。
Web Worker
Worker は独立スレッドで重い処理を実行し UI をブロックしません。postMessage で通信。Node では worker_threads を使います。
並行数の制御
バッチ非同期タスクでは並行数を制限し、リソース枯渇を防ぎます。バッチ処理やセマフォを使います。
マイクロタスクとマクロタスク
マイクロタスク(Promise.then、queueMicrotask)はマクロタスク(タイマー)より優先されます。各ターンで先にすべて処理されます。
15.ネットワークと HTTP
fetch リクエスト、HTTP メソッド、エラー処理、JSON、WebSocket、URL。
fetch の基本
fetch は HTTP リクエストを送り Promise を返します。res.ok で成功判定、res.json() / text() で読み取り。Node 18+ とブラウザ内蔵です。
POST とリクエストボディ
fetch の第 2 引数で method、headers、body を設定します。JSON ボディは JSON.stringify が必要です。
クエリパラメータ
URLSearchParams でクエリ文字列を構築、encodeURIComponent で特殊文字をエンコード、URL で URL を解析します。
ネットワークエラー処理
fetch はネットワーク層失敗でのみ reject します(HTTP 4xx / 5xx は例外を投げない)ので res.ok を確認してください。タイムアウトは AbortController を使います。
WebSocket
WebSocket は全二重の長時間接続で、onopen / onmessage / onclose イベントと send() で送信します。リアルタイム推送に適しています。
axios との比較
axios はインターセプタ、自動 JSON、豊富なエラーオブジェクトを提供します。fetch はネイティブ、axios はサードパーティです。
HTTP ステータスコード
2xx 成功、3xx リダイレクト、4xx クライアントエラー、5xx サーバーエラー。よく見るのは 200 / 201 / 400 / 401 / 404 / 500。
FormData でファイルアップロード
FormData でマルチパートフォームを作り、fetch で POST してファイルとフィールドをアップロードします。進捗は XMLHttpRequest の方が扱いやすいです。
16.日付と時刻
Date、タイムスタンプ、フォーマット、タイムゾーン、タイマー。
Date の基本
new Date() で現在時刻。getFullYear / getMonth(0 始まり!)/ getDate で各要素を取得します。月が 0 始まりに注意。
タイムスタンプ
Date.now() は UTC エポックからのミリ秒タイムスタンプ。getTime() も同じです。タイムゾーン横断の保存はタイムスタンプか ISO 文字列で。
フォーマット出力
toLocaleDateString / toLocaleString はローカライズ形式、Intl.DateTimeFormat で細かく制御します。
タイムゾーン
getTime は UTC のある瞬間、ローカルのメソッド(getHours など)は実行タイムゾーンで表示します。保存は ISO / タイムスタンプで。
経過時間
2 つの Date を引くとミリ秒差が得られます。秒 / 分 / 時に変換。より高精度な計測は performance.now を使います。
日付の演算
日 / 月の加算は setDate / setMonth かミリ秒演算で。注意点は 0 始まりの月と月の境界です。
日付の解析
new Date(string) で日付文字列を解析します。ISO 形式が最も信頼でき、他形式は互換性の差があります。
Intl フォーマット
Intl.NumberFormat は数値 / 通貨、Intl.DateTimeFormat は日付。地域ごとにローカライズ出力します。
17.Node プロセス
process の環境変数、引数、終了コード、カレントディレクトリ、プロセス情報。
環境変数
process.env で環境変数を読みます(Node)。process.env.NODE_ENV がよく使われます。クロスプラットフォーム設定は .env ファイルで。
コマンドライン引数
process.argv は生の引数です。オプション解析は commander / yargs を、簡単な場合は手書きでも構いません。
終了コード
process.exit(code) で終了コードを指定して終了します(0 成功、非 0 失敗)。未捕捉例外はデフォルトでコード 1 です。
カレントディレクトリとパス
process.cwd() は作業ディレクトリ、__dirname はモジュールのディレクトリ、__filename はモジュールのファイル(CJS)。
プロセスシグナル
SIGINT(Ctrl+C)、SIGTERM(kill のデフォルト)を処理して、Graceful にシャットダウン(データ保存、接続クローズ)。
プロセス情報
process.pid はプロセス ID、process.uptime() は稼働秒数、process.memoryUsage() はメモリ、process.platform は OS。
標準ストリーム
process.stdin / stdout / stderr の 3 つの標準ストリーム。パイプライン、リダイレクト、シェル連携に使います。
子プロセス child_process
child_process は外部コマンド起動:exec は出力取得、spawn はストリーム、fork は JS スクリプト。シェルインジェクションに注意。
18.正規表現
正規表現リテラル、マッチ、キャプチャグループ、置換、よく使うパターン。
正規表現の構文
リテラル /pattern/ または new RegExp。\d 数字、\w 単語文字、\s 空白、[] 文字クラス、{} 量指定子。
正規表現のフラグ
g はグローバル、i は大小無視、m はマルチライン(^$ が行頭 / 末)、s は dotAll(. が改行に一致)、u は Unicode。
test と match
test は boolean、match は結果、matchAll はすべてのマッチを反復、exec は単発マッチで lastIndex を持ちます。
キャプチャグループ
丸括弧はキャプチャ、match[1] で取得、名前付きグループ (?<name>...) は match.groups.name。 非キャプチャは (?:...)。
正規表現による置換
replace は $1 / $<name> でグループ参照、コールバック関数も使えます。replaceAll はすべて置換(g 相当)。
よく使うパターン
メール、URL、IP、電話番号、英数字のみ。本番の検証では許可リストや専用ライブラリがより堅牢です。
正規表現のパフォーマンス
破滅的バックトラック(入れ子の量指定子)を避ける。入力が長い場合は正規表現を事前にコンパイルする。必要に応じて文字列メソッドで代替する。
先読みと後読み
アサーションは位置だけをマッチし文字を消費しません:先読み (?=)、否定先読み (?!)、後読み (?<=)。パスワードや境界の検証に有用です。
19.ビルドとデバッグ
npm スクリプト、バンドラ、デバッグ、テスト、コード規約。
npm スクリプト
package.json の scripts でよく使うコマンドを定義し、npm run で実行します。&& で連結、pre / post フックも使えます。
バンドラ
Vite(モダン推奨)、webpack、Rollup、esbuild が ES モジュールをブラウザ向けコードにバンドルします。
デバッグ
console のレベル分け、debugger でブレークポイント、Node --inspect でデバッガ。ソースマップで元ソースへ。
テスト
Vitest / Jest の単体テスト:describe でグループ化、test / it でケース、expect でアサーション。npm test で実行。
ESLint でのリント
ESLint が構文とスタイルをチェック、Prettier がフォーマットを統一、pre-commit フックで自動化します。
TypeScript 統合
TS は型を追加します。tsc でコンパイル、ts-node / tsx で直接実行。Vite は .ts をネイティブにサポートします。
CI とデプロイ
CI でテストとビルドを自動実行。GitHub Actions などのワークフロー設定。成果物を静的ホストやコンテナにデプロイします。
ESM と CJS
2 つのモジュールシステム:ESM は静的 import で tree-shake 可能、CJS は動的 require で実行時読み込み。type フィールドでデフォルトを制御。
このチートシートについて
このページは ECMAScript 2022(JavaScript)の自己完結型チートシートです。言語コアと、ブラウザ / Node のよく使う API を実プロジェクトの約 80% で扱う範囲でカバーします。内容はモダンなイディオム中心:let / const のブロックスコープ、アロー関数、テンプレート文字列、分割代入、スプレッド、Promise と async / await、オプショナル連鎖と null 合体演算子。JavaScript は 1995 年に Brendan Eich が Netscape で開発し、今ではすべてのブラウザがネイティブサポートする唯一の言語であり、Web フロントエンド、Node.js サーバー、デスクトップアプリの基盤となっています。 19 のセクションはそれぞれ 1 つのテーマに焦点を当てます:基本構文、変数とスコープ、型、参照と値セマンティクス、制御フロー、関数とクロージャ、文字列、配列とオブジェクト、メモリと GC、プロトタイプとクラス、エラー処理、IO、よくある落とし穴、並行処理(イベントループ)、ネットワーク(fetch)、時間、プロセス、正規表現、ビルドツール。各サブセクションには「概念紹介 + コピペ可能なコード」が付いています。 すべてのコードとテキストはブラウザ内でローカルにレンダリングされ、データは一切デバイス外へ出ません。信頼すべきリファレンスは MDN Web Docs です。
バージョン 2.1.0