JavaScript 第7版

[cover photo]
TOPICS
Web , JavaScript
発行年月日
PRINT LENGTH
784
ISBN
978-4-87311-970-0
原書
JavaScript: The Definitive Guide, 7th Edition
FORMAT
Print PDF EPUB
Ebook
5,060円
Ebookを購入する
Print
5,060円

JavaScriptは最も多くのソフトウェア開発者に使用されているプログラミング言語です。JavaScriptを包括的に解説する本書は、第6版から大幅に加筆および更新し、全面改訂しました。 はじめにJavaScript言語仕様の基本的な構文と機能について豊富なサンプルコードを使って学習します。そしてJavaScript標準ライブラリを詳述し、Webブラウザで使われるクライアントサイドJavaScriptやNode.jsで使われるサーバサイドJavaScriptについてわかりやすく説明します。またNode形式と標準形式のモジュールの使い方、イテレータとジェネレータ、async/awaitやPromiseなどの非同期プログラミングの新しい構文、クラスの定義方法などを紹介し、さらにツール群や言語拡張機能、理解の難しいJavaScript特有の動きなどについても学ぶことができます。 WebプラットフォームやNode.jsの基礎となるJavaScript言語を根本から解説する本書は、JavaScriptをマスターして使いこなしたい開発者必携の一冊です。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

・331ページ 上から13行目
【誤】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 まとめ

索引