JavaScriptは最も多くのソフトウェア開発者に使用されているプログラミング言語です。JavaScriptを包括的に解説する本書は、第6版から大幅に加筆および更新し、全面改訂しました。 はじめにJavaScript言語仕様の基本的な構文と機能について豊富なサンプルコードを使って学習します。そしてJavaScript標準ライブラリを詳述し、Webブラウザで使われるクライアントサイドJavaScriptやNode.jsで使われるサーバサイドJavaScriptについてわかりやすく説明します。またNode形式と標準形式のモジュールの使い方、イテレータとジェネレータ、async/awaitやPromiseなどの非同期プログラミングの新しい構文、クラスの定義方法などを紹介し、さらにツール群や言語拡張機能、理解の難しいJavaScript特有の動きなどについても学ぶことができます。 WebプラットフォームやNode.jsの基礎となるJavaScript言語を根本から解説する本書は、JavaScriptをマスターして使いこなしたい開発者必携の一冊です。
JavaScript 第7版
David Flanagan 著、村上 列 訳
- TOPICS
- Web , JavaScript
- 発行年月日
- 2021年12月
- PRINT LENGTH
- 784
- ISBN
- 978-4-87311-970-0
- 原書
- JavaScript: The Definitive Guide, 7th Edition
- FORMAT
- Print PDF EPUB
関連ファイル
正誤表
ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。
第1刷正誤表
・331ページ 上から13行目
【誤】getUTCFullYea()
【正】getUTCFullYear()
・452ページ 上から6行目
【誤】<script>タグのtype属性を使うの以下の2つの場合だけです。
【正】<script>タグのtype属性を使うのは以下の2つの場合だけです。
・703ページ 上から12行目
【誤】バンドラによっては、開発者向けに「ホットモジュール交換(hot module replacement)」 モードサポートしているものもあります。
【正】バンドラによっては、開発者向けに「ホットモジュール交換(hot module replacement)」 モードをサポートしているものもあります。
【誤】getUTCFullYea()
【正】getUTCFullYear()
・452ページ 上から6行目
【誤】<script>タグのtype属性を使うの以下の2つの場合だけです。
【正】<script>タグのtype属性を使うのは以下の2つの場合だけです。
・703ページ 上から12行目
【誤】バンドラによっては、開発者向けに「ホットモジュール交換(hot module replacement)」 モードサポートしているものもあります。
【正】バンドラによっては、開発者向けに「ホットモジュール交換(hot module replacement)」 モードをサポートしているものもあります。
目次
目次 本書への推薦の言葉 訳者まえがき はじめに 1章 JavaScriptの概要 1.1 JavaScriptを体験する 1.2 Hello World 1.3 JavaScriptコードを見てみよう 1.4 例:文字頻度ヒストグラム 1.5 まとめ 2章 字句構造 2.1 JavaScriptプログラムのテキスト 2.2 コメント 2.3 リテラル 2.4 識別子と予約語 2.4.1 予約語 2.5 Unicode 2.5.1 Unicodeエスケープシーケンス 2.5.2 Unicode正規化 2.6 省略可能なセミコロン 2.7 まとめ 3章 型、値、変数 3.1 概要と定義 3.2 数値 3.2.1 整数リテラル 3.2.2 浮動小数点リテラル 3.2.3 JavaScriptでの算術演算 3.2.4 2進浮動小数点と丸め誤差 3.2.5 BigIntによる任意精度整数 3.2.6 日付と時刻 3.3 テキスト 3.3.1 文字列リテラル 3.3.2 文字列リテラルのエスケープシーケンス 3.3.3 文字列の操作 3.3.4 テンプレートリテラル 3.3.5 パターンマッチング 3.4 論理値 3.5 nullと undefined 3.6 Symbol 3.7 グローバルオブジェクト 3.8 不変な基本型値と可変なオブジェクト参照 3.9 型の変換 3.9.1 変換と比較 3.9.2 明示的な型変換 3.9.3 オブジェクトから基本型への変換 3.10 変数の宣言と代入 3.10.1 letとconstによる宣言 3.10.2 varによる変数宣言 3.10.3 分割代入 3.11 まとめ 4章 式と演算子 4.1 単項式 4.2 オブジェクトと配列の初期化子 4.3 関数定義式 4.4 プロパティアクセス式 4.4.1 条件付きプロパティアクセス 4.5 呼び出し式 4.5.1 条件付き呼び出し 4.6 オブジェクト生成式 4.7 演算子の概要 4.7.1 オペランドの数 4.7.2 オペランドと演算結果の型 4.7.3 演算子の副作用 4.7.4 演算子の優先順位 4.7.5 演算子の結合性 4.7.6 評価順序 4.8 算術演算子 4.8.1 +演算子 4.8.2 単項算術演算子 4.8.3 ビット演算子 4.9 関係演算子 4.9.1 等値演算子と不等演算子 4.9.2 比較演算子 4.9.3 in演算子 4.9.4 instanceof演算子 4.10 論理演算子 4.10.1 論理積演算子(&&) 4.10.2 論理和演算子(||) 4.10.3 論理否定演算子(!) 4.11 代入演算子 4.11.1 算術演算を伴う代入演算子 4.12 評価式 4.12.1 eval() 4.12.2 グローバルeval() 4.12.3 strictモードでのeval() 4.13 そのほかの演算子 4.13.1 条件演算子(?:) 4.13.2 ファーストデファインド演算子(??) 4.13.3 typeof演算子 4.13.4 delete演算子 4.13.5 await演算子 4.13.6 void演算子 4.13.7 カンマ演算子 4.14 まとめ 5章 文 5.1 式文 5.2 複合文と空文 5.3 条件文 5.3.1 if文 5.3.2 elseif文 5.3.3 switch文 5.4 ループ文 5.4.1 while文 5.4.2 do/while文 5.4.3 for文 5.4.4 for/of文 5.4.5 for/in文 5.5 ジャンプ文 5.5.1 ラベル文 5.5.2 break文 5.5.3 continue文 5.5.4 return文 5.5.5 yield文 5.5.6 throw文 5.5.7 try/catch/finally文 5.6 そのほかの文 5.6.1 with文 5.6.2 debugger文 5.6.3 "usestrict"文 5.7 宣言文 5.7.1 const、let、var文 5.7.2 function文 5.7.3 class文 5.7.4 import文とexport文 5.8 JavaScript文のまとめ 6章 オブジェクト 6.1 オブジェクトの概要 6.2 オブジェクトの生成 6.2.1 オブジェクトリテラル 6.2.2 newを使ったオブジェクトの生成 6.2.3 プロトタイプ 6.2.4 Object.create() 6.3 プロパティの読み出しと書き込み 6.3.1 連想配列としてのオブジェクト 6.3.2 継承 6.3.3 プロパティアクセスのエラー 6.4 プロパティの削除 6.5 プロパティのテスト 6.6 オブジェクトプロパティの調査 6.6.1 プロパティの列挙順序 6.7 オブジェクトの拡張 6.8 オブジェクトのシリアライズ 6.9 オブジェクトのメソッド 6.9.1 toString()メソッド 6.9.2 toLocaleString()メソッド 6.9.3 valueOf()メソッド 6.9.4 toJSON()メソッド 6.10 オブジェクトリテラルの拡張構文 6.10.1 プロパティの簡略記法 6.10.2 算出プロパティ名 6.10.3 プロパティ名としてのSymbol 6.10.4 スプレッド演算子 6.10.5 メソッドの簡略記法 6.10.6 プロパティのゲッターメソッドとセッターメソッド 6.11 まとめ 7章 配列 7.1 配列の生成 7.1.1 配列リテラル 7.1.2 スプレッド演算子 7.1.3 Array()コンストラクタ 7.1.4 Array.of() 7.1.5 Array.from() 7.2 配列の要素の読み書き 7.3 疎な配列 7.4 配列の長さ 7.5 配列の要素の追加と削除 7.6 配列の要素の巡回 7.7 多次元配列 7.8 配列のメソッド 7.8.1 配列イテレータメソッド 7.8.2 flat()メソッドとflatMap()メソッドによる配列のフラット化 7.8.3 concat()メソッドによる配列の結合 7.8.4 push()メソッド、pop()メソッド、shift()メソッド、unshift()メソッドによるスタック/キュー 7.8.5 slice()メソッド、splice()メソッド、fill()メソッド、copyWithin()メソッドによるサブ配列操作 7.8.6 配列の検索メソッドとソートメソッド 7.8.7 配列から文字列への変換 7.8.8 配列の静的関数 7.9 配列のようなオブジェクト 7.10 配列としての文字列 7.11 まとめ 8章 関数 8.1 関数の定義 8.1.1 関数宣言文 8.1.2 関数式 8.1.3 アロー関数 8.1.4 入れ子型の関数 8.2 関数の呼び出し 8.2.1 関数呼び出し 8.2.2 メソッド呼び出し 8.2.3 コンストラクタ呼び出し 8.2.4 間接的な呼び出し 8.2.5 暗黙的な関数呼び出し 8.3 関数の引数とパラメータ 8.3.1 省略可能なパラメータとデフォルト値 8.3.2 残余パラメータと可変長の引数リスト 8.3.3 Argumentsオブジェクト 8.3.4 関数呼び出しのスプレッド演算子 8.3.5 引数の分割代入 8.3.6 引数の型 8.4 値としての関数 8.4.1 関数の独自プロパティの定義 8.5 名前空間としての関数 8.6 クロージャ 8.7 関数のプロパティとメソッドとコンストラクタ 8.7.1 lengthプロパティ 8.7.2 nameプロパティ 8.7.3 prototypeプロパティ 8.7.4 call()メソッドとapply()メソッド 8.7.5 bind()メソッド 8.7.6 toString()メソッド 8.7.7 Function()コンストラクタ 8.8 関数型プログラミング 8.8.1 関数による配列の処理 8.8.2 高階関数 8.8.3 関数の部分適用 8.8.4 メモ化 8.9 まとめ 9章 クラス 9.1 クラスとプロトタイプ 9.2 クラスとコンストラクタ 9.2.1 コンストラクタ、クラスの同一性とinstanceof 9.2.2 constructorプロパティ 9.3 classキーワードによるクラス 9.3.1 静的メソッド 9.3.2 ゲッターメソッドやセッターメソッドなど、ほかのメソッド形式 9.3.3 パブリックフィールドとプライベートフィールド、静的フィールド 9.3.4 例:複素数クラス 9.4 既存のクラスへのメソッドの追加 9.5 サブクラス 9.5.1 サブクラスとプロトタイプ 9.5.2 extendsとsuperによるサブクラス化 9.5.3 継承の代わりの委譲 9.5.4 クラス階層と抽象クラス 9.6 まとめ 10章 モジュール 10.1 クラス、オブジェクト、クロージャによるモジュール 10.1.1 クロージャによるモジュール化の自動化 10.2 Nodeのモジュール 10.2.1 Nodeのエクスポート 10.2.2 Nodeのインポート 10.2.3 Web上のNode形式のモジュール 10.3 ES6のモジュール 10.3.1 ES6のエクスポート 10.3.2 ES6のインポート 10.3.3 名前変更を伴うインポートとエクスポート 10.3.4 再エクスポート 10.3.5 Web上のJavaScriptモジュール 10.3.6 import()による動的インポート 10.3.7 import.meta.url 10.4 まとめ 11章 JavaScript標準ライブラリ 11.1 SetとMap 11.1.1 Setクラス 11.1.2 Mapクラス 11.1.3 WeakMapとWeakSet 11.2 型付き配列とバイナリデータ 11.2.1 型付き配列の型 11.2.2 型付き配列の作成 11.2.3 型付き配列の使い方 11.2.4 型付き配列のメソッドとプロパティ 11.2.5 DataViewとエンディアン 11.3 正規表現によるパターンマッチング 11.3.1 正規表現の定義 11.3.2 パターンマッチング用の文字列メソッド 11.3.3 RegExpクラス 11.4 日付と時刻 11.4.1 タイムスタンプ 11.4.2 日付の計算 11.4.3 日付文字列の書式設定と解釈 11.5 Errorクラス 11.6 JSONのシリアライズと解釈 11.6.1 JSONのカスタマイズ 11.7 国際化API 11.7.1 数字のフォーマット 11.7.2日付と時刻のフォーマット 11.7.3 文字列の比較 11.8 Console API 11.8.1 コンソールへのフォーマット出力 11.9 URL API 11.9.1 レガシーなURL関数 11.10 タイマー 11.11まとめ 12章 イテレータとジェネレータ 12.1 イテレータの仕組み 12.2反復可能オブジェクトの実装 12.2.1 イテレータを閉じる:return()メソッド 12.3 ジェネレータ 12.3.1ジェネレータの例 12.3.2 yield*と再帰的ジェネレータ 12.4 ジェネレータの高度な機能 12.4.1 ジェネレータ関数の戻り値 12.4.2 yield式の値 12.4.3 ジェネレータのreturn()メソッドとthrow()メソッド 12.4.4 ジェネレータについての注意事項 12.5 まとめ 13章 非同期JavaScript 13.1コールバックによる非同期プログラミング 13.1.1 タイマー 13.1.2 イベント 13.1.3 ネットワークイベント 13.1.4 Nodeのコールバックとイベント 13.2 Promise 13.2.1 Promiseの使い方 13.2.2 Promiseチェーン 13.2.3 Promiseの解決 13.2.4 Promiseとエラーの詳細 13.2.5 Promiseの並行処理 13.2.6 Promiseの作成 13.2.7 Promiseの逐次処理 13.3 asyncとawait 13.3.1 await式 13.3.2 async関数 13.3.3 複数のPromiseを待つ 13.3.4 処理の詳細 13.4 非同期な反復 13.4.1 for/awaitループ 13.4.2 非同期イテレータ 13.4.3 非同期ジェネレータ 13.4.4 非同期イテレータの実装 13.5 まとめ 14章 メタプログラミング 14.1 プロパティ属性 14.2 オブジェクトの拡張性 14.3 プロトタイプ属性 14.4 ウェルノウンSymbol 14.4.1 Symbol.iteratorと Symbol.asyncIterator 14.4.2 Symbol.hasInstance 14.4.3 Symbol.toStringTag 14.4.4 Symbol.species 14.4.5 Symbol.isConcatSpreadable 14.4.6 パターンマッチング用のSymbol 14.4.7 Symbol.toPrimitive 14.4.8 Symbol.unscopables 14.5 テンプレートタグ 14.6 Reflect API 14.7 Proxyオブジェクト 14.7.1 Proxyの不変性 14.8 まとめ 15章 Webブラウザ上のJavaScript 15.1 Webプログラミングの基礎 15.1.1 HTMLの<script>タグ中のJavaScript 15.1.2 ドキュメントオブジェクトモデル 15.1.3 Webブラウザのグローバルオブジェクト 15.1.4 名前空間を共有するスクリプト 15.1.5 JavaScriptプログラムの実行方法 15.1.6 プログラムの入力と出力 15.1.7 プログラムエラー 15.1.8 Webのセキュリティモデル 15.2 イベント 15.2.1 イベントの分類 15.2.2 イベントハンドラの登録 15.2.3 イベントハンドラ呼び出し 15.2.4 イベント伝播 15.2.5 イベントのキャンセル 15.2.6 カスタムイベントのディスパッチ 15.3 ドキュメントの制御 15.3.1 ドキュメント要素の選択 15.3.2 ドキュメント構造と探索 15.3.3 属性 15.3.4 要素のコンテンツ 15.3.5 ノードの作成、挿入、削除 15.3.6 例:目次の作成 15.4 CSSの制御 15.4.1 CSSクラス 15.4.2 インラインスタイル 15.4.3 算出スタイル 15.4.4 スタイルシートの制御 15.4.5 CSSアニメーションとイベント 15.5 ドキュメントの位置とスクロール 15.5.1 ドキュメント座標とビューポート座標 15.5.2 要素のジオメトリの取得 15.5.3 位置から要素を取得 15.5.4 スクロール 15.5.5 ビューポートの大きさ、コンテンツの大きさ、スクロール位置 15.6 Web Components 15.6.1 Web Componentsの使い方 15.6.2 HTMLテンプレート 15.6.3 カスタム要素 15.6.4 シャドウDOM 15.6.5 例:<search-box>Web Components 15.7 SVG(Scalable Vector Graphics) 15.7.1 HTML中のSVG 15.7.2 SVGの制御 15.7.3 JavaScriptによるSVG画像の作成 15.8 <canvas>中のグラフィック 15.8.1 パスとポリゴン 15.8.2 キャンバスの大きさと座標 15.8.3 グラフィック属性 15.8.4 キャンバスの描画処理 15.8.5 座標変換 15.8.6 クリッピング 15.8.7 ピクセル操作 15.9 オーディオAPI 15.9.1 Audio()コンストラクタ 15.9.2 WebAudio API 15.10 ロケーション、ナビゲーション、履歴 15.10.1 新しいドキュメントの読み込み 15.10.2 閲覧履歴 15.10.3 hashchangeイベントによる履歴管理 15.10.4 pushState()による履歴管理 15.11 ネットワーク処理 15.11.1 fetch() 15.11.2 Server-Sentイベント 15.11.3 WebSocket 15.12 ストレージ 15.12.1 localStorageとsessionStorage 15.12.2 クッキー 15.12.3 IndexedDB 15.13 ワーカースレッドとメッセージング 15.13.1 Workerオブジェクト 15.13.2 ワーカーのグローバルオブジェクト 15.13.3 ワーカーへのコードの読み込み 15.13.4 ワーカーの実行モデル 15.13.5 postMessage()、MessagePort、MessageChannel 15.13.6 postMessage()によるクロスオリジンメッセージング 15.14 例:マンデルブロ集合 15.15 まとめと参考文献 15.15.1 HTMLとCSS 15.15.2 パフォーマンス 15.15.3 セキュリティ 15.15.4 WebAssembly 15.15.5 DocumentとWindowのそのほかの機能 15.15.6 イベント 15.15.7 プログレッシブWebアプリケーションとService Worker 15.15.8 モバイルデバイスAPI 15.15.9 バイナリAPI 15.15.10 メディアAPI 15.15.11 暗号関連のAPI 16章 Node上のサーバサイドJavaScript 16.1 Nodeプログラミングの基礎 16.1.1 コンソール出力 16.1.2 コマンドライン引数と環境変数 16.1.3 プログラムのライフサイクル 16.1.4 Nodeモジュール 16.1.5 Nodeパッケージマネージャ 16.2 Nodeはデフォルトで非同期 16.3 バッファ 16.4 イベントとEventEmitter 16.5 ストリーム 16.5.1 パイプ 16.5.2 非同期の反復 16.5.3 ストリームへの書き込みとバックプレッシャーへの対応 16.5.4 イベントによるストリームの読み出し 16.6 プロセス、CPU、OSの詳細情報 16.7 ファイルの操作 16.7.1 パス、ファイルディスクリプタ、FileHandler 16.7.2 ファイルの読み込み 16.7.3 ファイルの書き込み 16.7.4 ファイル操作 16.7.5 ファイルのメタデータ 16.7.6 ディレクトリの利用 16.8 HTTPクライアントとサーバ 16.9 HTTP以外のネットワークサーバとクライアント 16.10 子プロセスとの連携 16.10.1 execSync()とexecFileSync() 16.10.2 exec()とexecFile() 16.10.3 spawn() 16.10.4 fork() 16.11 ワーカースレッド 16.11.1 ワーカースレッドの作成とメッセージの受け渡し 16.11.2 ワーカースレッドの実行環境 16.11.3 通信チャンネルとMessagePort 16.11.4 MessagePortと型付き配列の転送 16.11.5 スレッド間での型付き配列の共有 16.12 まとめ 17章 JavaScriptのツールと拡張機能 17.1 ESLintによるlinting 17.2 PrettierによるJavaScriptの整形 17.3 Jestによるユニットテスト 17.4 npmによるパッケージ管理 17.5 コードバンドル 17.6 Babelによるトランスコンパイル 17.7 JSX:JavaScript中のマークアップ式 17.8 Flowによる型チェック 17.8.1 Flowのインストールと実行 17.8.2 型アノテーションの使い方 17.8.3 クラス型 17.8.4 オブジェクト型 17.8.5 型の別名 17.8.6 配列型 17.8.7 そのほかのパラメータ付き型 17.8.8 読み出し専用の型 17.8.9 関数型 17.8.10 共用体型 17.8.11 列挙型と判別共用体 17.9 まとめ 索引