JavaScript 第7版
- David Flanagan 著、村上 列 訳
- 2021年12月 発行
- 784ページ
- ISBN978-4-87311-970-0
- フォーマット Print PDF ePub
- 原書: JavaScript: The Definitive Guide, 7th Edition
5,060円
書籍のご注文はオーム社サイトへ
内容
JavaScriptは最も多くのソフトウェア開発者に使用されているプログラミング言語です。JavaScriptを包括的に解説する本書は、第6版から大幅に加筆および更新し、全面改訂しました。 はじめにJavaScript言語仕様の基本的な構文と機能について豊富なサンプルコードを使って学習します。そしてJavaScript標準ライブラリを詳述し、Webブラウザで使われるクライアントサイドJavaScriptやNode.jsで使われるサーバサイドJavaScriptについてわかりやすく説明します。またNode形式と標準形式のモジュールの使い方、イテレータとジェネレータ、async/awaitやPromiseなどの非同期プログラミングの新しい構文、クラスの定義方法などを紹介し、さらにツール群や言語拡張機能、理解の難しいJavaScript特有の動きなどについても学ぶことができます。 WebプラットフォームやNode.jsの基礎となるJavaScript言語を根本から解説する本書は、JavaScriptをマスターして使いこなしたい開発者必携の一冊です。
関連書籍
目次
目次
本書への推薦の言葉
訳者まえがき
はじめに
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 まとめ
索引