ISBN: 978-4-7741-8411-1
改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
サポート終了
| 著者 | 山田祥寛 |
|---|---|
| 出版社 | 技術評論社 |
| 価格 | 2,980円(税別) |
| 判型 | B5変判・2色 |
| ページ数 | 456ページ |
| 発売日 | 2016年9月30日 |
| 対象レベル | 初中級 |
JavaScriptの基礎から新記法まできっちり解説
「ECMAScript 2015」による新記法はもちろん、基本からオブジェクト指向構文、Ajax、クライアントサイド開発まで詳しく解説しています。また、テスト、ドキュメンテーション、コーディング規約など現場で避けられない知識もしっかり押さえました。JavaScript開発者必携の1冊です。
更新履歴
- 正誤訂正:2022年4月28日 更新
目次
- Chapter 1:イントロダクション
- 1.1 JavaScriptとは?
- 1.1.1 JavaScriptの歴史
- 1.1.2 復権のきっかけはAjax、そしてHTML5
- 1.1.3 マイナスイメージの誤解
- 1.1.4 言語としての4つの特徴
- 1.2 次世代JavaScript「ECMAScript 2015」とは?
- 1.2.1 ブラウザーの対応状況
- 1.3 ブラウザー付属の開発者ツール
- 1.3.1 開発者ツールを起動する
- 1.3.2 HTML/CSSのソースを確認する - [Elements]タブ -
- 1.3.3 通信状況をトレースする - [Network]タブ -
- 1.3.4 スクリプトをデバッグする - [Sources]タブ -
- 1.3.5 ストレージ/クッキーの内容を確認する - [Application]タブ -
- 1.3.6 ログ確認/オブジェクト操作などの万能ツール - [Console]タブ -
- Chapter 2:基本的な書き方を身につける
- 2.1 JavaScriptの基本的な記法
- 2.1.1 JavaScriptで「こんにちは、世界!」
- 2.1.2 JavaScriptをHTMLファイルに組み込む - <Script>要素 -
- 2.1.3 文(Statement)のルール
- 2.1.4 コメントを挿入する
- 2.2 変数/定数
- 2.2.1 変数を宣言する
- 2.2.2 識別子の命名規則
- 2.2.3 定数を宣言する
- 2.3 データ型
- 2.3.1 JavaScriptの主なデータ型
- 2.3.2 リテラル
- 2.4 演算子
- 2.4.1 算術演算子
- 2.4.2 代入演算子
- 2.4.3 比較演算子
- 2.4.4 論理演算子
- 2.4.5 ビット演算子
- 2.4.6 その他の演算子
- 2.4.7 演算子の優先順位と結合測
- 2.5 制御構文
- 2.5.1 条件によって処理を分岐する - if命令 -
- 2.5.2 式の値によって処理を分岐する - switch命令 -
- 2.5.3 条件氏によってループを制御する - while/do...while命令 -
- 2.5.4 無限ループ
- 2.5.5 指定回数だけループを処理する - for命令 -
- 2.5.6 連想配列の要素を順に処理する - for...in命令 -
- 2.5.7 配列などを順に処理する - for...of命令 -
- 2.5.8 ループを途中でスキップする/中断する - break/continue命令 -
- 2.5.9 例外を処理する - try...catch...finally命令 -
- 2.5.10 JavaScriptの危険な構文を禁止する - Strictモード -
- Chapter 3:基本データを操作する - 組み込みオブジェクト -
- 3.1 オブジェクトとは
- 3.1.1 オブジェクト=プロパティ+メソッド
- 3.1.2 オブジェクトを利用するための準備 - new演算子 -
- 3.1.3 静的プロパティ/静的メソッド
- 3.1.4 組み込みオブジェクトとは
- 3.2 基本データを扱うためのオブジェクト
- 3.2.1 文字列を操作する - Stringオブジェクト -
- 3.2.2 数値を操作する - Numberオブジェクト -
- 3.2.3 シンボルを作成する - Symbolオブジェクト -
- 3.2.4 基本的な数学演算を実行する - Mathオブジェクト -
- 3.3 値の集合を管理/操作する - Array/Map/Setオブジェクト -
- 3.3.1 配列を操作する - Arrayオブジェクト -
- 3.3.2 連想配列を操作する - Mapオブジェクト -
- 3.3.3 重複しない値の集合を操作する - Setオブジェクト -
- 3.4 日付/時刻データを操作する - Dateオブジェクト -
- 3.4.1 Dateオブジェクトを生成する
- 3.4.2 日付/時刻値を加算/減算する
- 3.4.3 日付/時刻の差分を求める
- 3.5 正規表現で文字を自在に操作する - RegExpオブジェクト -
- 3.5.1 JavaScriptで利用可能な正規表現
- 3.5.2 RegExpオブジェクトをを生成する方法
- 3.5.3 正規表現による検索の基本
- 3.5.4 正規表現のオプションでマッチング時の挙動を制御する
- 3.5.5 matchメソッドとexecメソッドの挙動の違い
- 3.5.6 マッチングの成否を検証する
- 3.5.7 正規表現で文字列を置き換える
- 3.5.8 正規表現で文字列を分割する
- 3.6 すべてのオブジェクトのひな形 - Objectオブジェクト -
- 3.6.1 オブジェクトを基本型に変換する - toString/valueOfメソッド -
- 3.6.2 オブジェクトをマージする - assignメソッド -
- 3.6.3 オブジェクトを生成する - createメソッド -
- 3.6.4 不変オブジェクトを定義する
- 3.7 JavaScriptプログラムでよく利用する機能を提供する - Globalオブジェクト -
- 3.7.1 Numberオブジェクトに移動したメソッド
- 3.7.2 クエリ情報をエスケープ処理する - encodeURI/encodeURIComponent関数 -
- 3.7.3 動的に生成したスクリプトを実行する - eval関数 -
- Chapter 4:くり返し利用するコードを1箇所にまとめる - 関数 -
- 4.1 関数とは
- 4.1.1 function命令で定義する
- 4.1.2 Functionコンストラクター経由で定義する
- 4.1.3 関数リテラル表現で定義する
- 4.1.4 アロー関数で定義する
- 4.2 関数定義における4つの注意点
- 4.2.1 return命令の直後で改行しない
- 4.2.2 関数はデータ型の一種
- 4.2.3 function命令は静的な構造を宣言する
- 4.2.4 関数リテラル/Functionコンストラクターは実行時に評価される
- 4.3 変数はどの場所から参照できるか - スコープ -
- 4.3.1 グローバル変数とローカル変数の違い
- 4.3.2 変数宣言にvar命令が必須な理由
- 4.3.3 ローカル変数の有効範囲はどこまで?
- 4.3.4 仮引数のスコープ - 基本型と参照型の違いに注意する -
- 4.3.5 ブロックレベルのスコープは存在しない(ES2015以前)
- 4.3.6 ブロックスコープに対応したlet命令
- 4.3.7 関数リテラル/Functionコンストラクターにおけるスコープの違い
- 4.4 引数のさまざまな記法
- 4.4.1 JavaScriptは引数の数をチェックしない
- 4.4.2 可変長引数の関数を定義する
- 4.4.3 明示的に宣言された引数と可変長引数を混在させる
- 4.4.4 名前付き引数でコードを読みやすくする
- 4.5 ES2015における引数の記法
- 4.5.1 引数のデフォルト値
- 4.5.2 可変長引数の関数を定義する
- 4.5.3 「...」演算子による引数の展開
- 4.5.4 名前付き引数でコードを読みやすくする
- 4.6 関数呼び出しと戻り値
- 4.6.1 複数の戻り値を個別の変数に代入する
- 4.6.2 関数自身を再帰的に呼び出す - 再帰関数 -
- 4.6.3 関数も引数も関数 - 高階関数 -
- 4.6.4 「使い捨ての関数」は匿名関数で
- 4.7 高度な関数のテーマ
- 4.7.1 テンプレート文字列をアプリ仕様にカスタマイズする - タグ付きテンプレート文字列 -
- 4.7.2 変数はどのような順番で解決されるか - スコープチェーン -
- 4.7.3 その振る舞いオブジェクトの如し - クロージャ -
- Chapter 5:大規模開発でも通用する書き方を身につける - オブジェクト指向構文 -
- 5.1 JavaScriptにおけるオブジェクト指向の特徴
- 5.1.1 「クラス」はなく「プロトタイプ」
- 5.1.2 最もシンプルなクラスを定義する
- 5.1.3 コンストラクターで初期化する
- 5.1.4 動的にメソッドを追加する
- 5.1.5 文脈によって中身が変化する変数 - thisキーワード -
- 5.1.6 コンストラクターの強制的な呼び出し
- 5.2 コンストラクターの問題点とプロトタイプ
- 5.2.1 メソッドはプロトタイプで宣言する - prototypeプロパティ -
- 5.2.2 プロトタイプオブジェクトを利用することの2つの利点
- 5.2.3 プロトタイプオブジェクトの不思議(1) - プロパティの設定 -
- 5.2.4 プロトタイプオブジェクトの不思議(2) - プロパティの削除 -
- 5.2.5 オブジェクトリテラルでプロトタイプを定義する
- 5.2.6 静的プロパティ/静的メソッドを定義する
- 5.3 オブジェクト継承 - プロトタイプチェーン -
- 5.3.1 プロトタイプチェーンの基礎
- 5.3.2 継承関係は動的に変更可能
- 5.3.3 オブジェクトの型を判定する
- 5.4 本格的な開発に備えるために
- 5.4.1 プライベートメンバーを定義する
- 5.4.2 Object.definePropertyメソッドによるアクセサーメソッドの実装
- 5.4.3 名前空間/パッケージを作成する
- 5.5 ES2015のオブジェクト指向構文
- 5.5.1 クラスを定義する - class命令 -
- 5.5.2 オブジェクトリテラルの改善
- 5.5.3 アプリを機能単位にまとめる - モジュール -
- 5.5.4 列挙可能なオブジェクトを定義する - イテレーター -
- 5.5.5 列挙可能なオブジェクトをより簡単に実装する - ジェネレーター -
- 5.5.6 オブジェクトの基本的な動作をカスタマイズする - Proxyオブジェクト -
- Chapter 6:HTMLやXMLの文書を操作する - DOM(Document Object Model) -
- 6.1 DOMの基本を押さえる
- 6.1.1 マークアップ言語を操作する標準のしくみ「DOM」
- 6.1.2 文書ツリーとノード
- 6.2 クライアントサイドJavaScriptの前提知識
- 6.2.1 要素ノードを取得する
- 6.2.2 文書ツリー間を行き来する - ノードウォーキング -
- 6.2.3 イベントをトリガーにして処理を実行する - イベントドリブンモデル -
- 6.3 属性値やテキストを取得/設定する
- 6.3.1 多くの属性は「要素ノードの同名のプロパティ」としてアクセスできる
- 6.3.2 不特定の属性を取得する
- 6.3.3 テキストを取得/設定する
- 6.4 フォーム要素にアクセスする
- 6.4.1 入力ボックス/選択ボックスの値を取得する
- 6.4.2 チェックボックスの値を取得する
- 6.4.3 ラジオボタンの値を取得する
- 6.4.4 ラジオボタン/チェックボックスの値を設定する
- 6.4.5 複数選択できるリストボックスの値を取得する
- 6.4.6 アップロードされたファイルの情報を取得する
- 6.5 ノードを追加/置換/削除する
- 6.5.1 innerHTMLプロパティとどのように使い分けるか
- 6.5.2 新規にノードを作成する
- 6.5.3 既存のノードを置換/削除する
- 6.5.4 HTMLCollection/NodeListをくり返し処理する場合の注意点
- 6.6 JavaScriptからスタイルシートを操作する
- 6.6.1 インラインスタイルにアクセスする - styleプロパティ -
- 6.6.2 外部のスタイルシートを適用する - classNameプロパティ -
- 6.6.3 スタイルクラスをより簡単に操作する - classListプロパティ -
- 6.7 より高度なイベント処理
- 6.7.1 イベントリスナー/イベントハンドラーを削除する
- 6.7.2 イベントに関わる情報を取得する - イベントオブジェクト -
- 6.7.3 イベント処理をキャンセルする
- 6.7.4 イベントリスナー/イベントハンドラー配下のthisキーワード
- Chapter 7:クライアントサイドJavaScript開発を極める
- 7.1 ブラウザーオブジェクトで知っておきたい基本機能
- 7.1.1 ブラウザーオブジェクトの階層構造
- 7.1.2 確認ダイアログを表示する - confirmメソッド -
- 7.1.3 タイマー機能を実装する - setInterval/setTimeoutメソッド -
- 7.1.4 表示ページのアドレス情報を取得/操作する - locationオブジェクト -
- 7.1.5 履歴に沿ってページを前後に移動する - historyオブジェクト -
- 7.1.6 JavaScriptによる操作をブラウザーの履歴に残す - pushStateメソッド -
- 7.1.7 アプリにクロスブラウザー対策を施す - navigatorオブジェクト -
- 7.2 デバッグ情報を出力する - Consoleオブジェクト -
- 7.2.1 コンソールにログを出力する
- 7.2.2 知っておくと便利なログメソッド
- 7.3 ユーザーデータを保存する - Storageオブジェクト -
- 7.3.1 ストレージにデータを保存/取得する
- 7.3.2 既存のデータを削除する
- 7.3.3 ストレージからすべてのデータを取り出す
- 7.3.4 ストレージにオブジェクトを保存/取得する
- 7.3.5 ストレージの変更を監視する
- 7.4 サーバー連携でリッチなUIを実装する - Ajax -
- 7.4.1 PHPのHello, WorldとAjaxのHello, Worldを比較してみる
- 7.4.2 Ajaxアプリ実装の基本
- 7.4.3 Ajaxアプリで構造化データを扱う
- 7.4.4 クライアントサイドでクロスオリジン通信を可能にする - JSONP -
- 7.4.5 クロスドキュメントメッセージングによるクロスオリジン通信
- 7.5 非同期処理を簡単に表現する - Promiseオブジェクト -
- 7.5.1 Promiseオブジェクトの基本を押さえる
- 7.5.2 非同期処理を連結する
- 7.5.3 複数の非同期処理を並行して実行する
- 7.6 バックグラウンドでJavaScriptのコードを実行する - Web Worker -
- 7.6.1 ワーカーを実装する
- 7.6.2 ワーカーを起動する
- Chapter 8:現場で避けて通れない応用知識
- 8.1 単体テスト - Jasmine -
- 8.1.1 Jasmineのインストール方法
- 8.1.2 テストの基本
- 8.1.3 テストスイートを実行する
- 8.2 ドキュメンテーションコメントでコードの内容をわかりやすくする - JSDoc -
- 8.2.1 ドキュメンテーションコメントの記述ルール
- 8.2.2 ドキュメント作成ツール - JSDoc -
- 8.3 ビルドツールで定型作業を自動化する - Grunt -
- 8.3.1 Gruntによるソースコードの圧縮
- 8.4 今すぐECMAScript2015を実践活用したい - Babel -
- 8.4.1 コードを手動で変換する
- 8.4.2 Grunt経由でBabelを実行する
- 8.4.3 簡易インタプリターを利用する
- 8.5 読みやすく保守しやすいコードを書く - コーディング規約 -
- 8.5.1 JavaScriptの主なコーディング規約
- 8.5.2 JavaScript style guide(MDN)の主な規約
- 8.5.3 Google標準のコーディングスタイル
- Column
- JavaScriptを学ぶうえで役立つサイト
- 外部スクリプトを非同期にロードする - async/defer 属性 -
- 「JavaScript の代替言語」altJS
- JavaScript のスーパーセット、静的型システムを備えたaltJS「TypeScript」
- JavaScriptとその周辺技術を学ぶための参考書籍
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.61 | 本文 3行目 | 3刷 |
| 前置演算(Pre Increment)、後方に置くことを後置演算(Post Increment)といいます。 | 前置演算(Pre Increment / Pre Decrement)、後方に置くことを後置演算(Post Increment / Post Decrement)といいます。 | 2017/02/24 |
| p.65 | 図:定数は「再代入できない」変数 右側の「10」から出ている矢印の先 | 3刷 |
| 1 | 2 | 2017/01/24 |
| p.78 | 表:演算子の優先順位 上から2行目 | 3刷 |
| 減算(-) | 単項マイナス(-) | 2017/02/24 |
| p.116 | 表:Stringオブジェクトの主なメンバー fromCharCodeの概要 | 3刷 |
| Latin-1コードc1、c2... | Latin-1コードc1、c2...を文字に変換 | 2017/02/24 |
| p.130 | 表:Arrayオブジェクトの主なメンバー | 3刷 |
| from(alike [,map [,othis]) ... push(data) |
from(alike [,map [,this]]) ... push(data1 [,data2,...]) |
2017/02/24 |
| p.131 | 図:Arrayオブジェクトのメンバー 「コールバック関数」の右側にある「map」の例の部分 | 3刷 |
| [0] [1] ... 4 6 ... |
[0] [1] ... 4 9 ... |
2017/02/24 |
| p.145 | Note 1行目 | 3刷 |
| WeakHash/WeakSetと呼ばれる | WeakSet/WeakMapと呼ばれる | 2017/02/24 |
| p.150 | 本文6行目 | 9刷 |
| もう一度、日付に変換しています。経過ミリ秒を日付に変換するには、 | 日数に変換しています。経過ミリ秒を日数に変換するには、 | 2022/04/28 |
| p.156 | 本文 下から5行目 | 3刷 |
| 「http(s)://」は「HTTP://」には | 「http(s)?://」は「HTTP://」には | 2017/02/24 |
| p.166 | 本文2行目 | 3刷 |
| (この例ではtitle) | (この例ではname) | 2017/02/24 |
| p.193 | 小見出し | 3刷 |
| ■即時命令は使わない | ■即時関数は使わない | 2017/02/24 |
| p.196 | 図:argumentsオブジェクト インデックスの表記 | 3刷 |
| [1]山田 [2]鈴木 |
[0]山田 [1]鈴木 |
2017/02/24 |
| p.199 | リスト4-27 variable_args2.js | 9刷 |
| for (var i = 0, len = arguments.length; i < len; i++) { | for (var i = 1, len = arguments.length; i < len; i++) { | 2022/04/08 |
| p.209 | 下から5行目 | 4刷 |
| この例では、getMaxMain関数で得られた | この例では、getMaxMin関数で得られた | 2017/10/19 |
| p.216 | 図:タグ付きテンプレート文字列の挙動 | 9刷 |
| テンプレート文字数/変数を分解 | テンプレート文字列/変数を分解 | 2022/04/28 |
| p.219 | リスト4-50の下 本文8行目 | 9刷 |
| 「匿名関数がローカル関数counterを参照し続けている」 | 「匿名関数がローカル変数counterを参照し続けている」 | 2022/04/28 |
| p.230 | 本文1行目 | 3刷 |
| 出力されるthis.xの値 | 出力されるthis.dataの値 | 2017/02/24 |
| p.237 | 図の下 本文6行目 | 3刷 |
| プロトタイプのnameプロパティを隠ぺい | プロトタイプのsexプロパティを隠ぺい | 2017/02/24 |
| p.243 | 本文最終行 | 5刷 |
| インスタンスメソッドと同様の意味で、「thisキーワードも使えない」 | インスタンスメソッドと同様の意味での「this キーワードは使えない」 | 2017/12/21 |
| p.254 | リスト5-26 accessor_define.js(baseプロパティの定義部分) | 3刷 |
| if(typeof tmp === \\'number\\' && && base > 0) { | if(typeof base === \\'number\\' && base > 0) { | 2016/11/23 |
| p.265 | [Note]の上のコード | 6刷 |
| { name = name, birth = birth }; | { name: name, birth: birth }; | 2018/06/08 |
| p.276 | リスト5-52 2行目 | 2刷 |
| var proxy = new Proxy(obj, { | var proxy = new Proxy(data, { | 2016/11/11 |
| p.276 | リスト5-52 proxy.js 2行目 | 5刷 |
| var proxy = ... | let proxy = ... | 2018/06/26 |
| p.291 | リスト6-07 JS の1行目 | 3刷 |
| // <select id="result">を取得 | // <select id="food">を取得 | 2017/04/25 |
| p.309 | 本文 下から2行目 | 3刷 |
| ラジオボタンがチェックされているかどうか | チェックボックスがチェックされているかどうか | 2017/02/24 |
| p.330 | リスト6-32 replace.js | 5刷 |
| img.alt = e.innerHTML; | img.alt = e.target.textContent; | 2017/12/28 |
| p.337 | 表:よく利用するスタイルプロパティ displayプロパティの概要 | 3刷 |
| tablerow ... runin |
table-row ... run-in |
2017/02/24 |
| p.338 | 表:よく利用するスタイルプロパティ listStyleTypeプロパティの概要 | 3刷 |
| lowergreek | lower-greek | 2017/02/24 |
| p.343 | 本文 1行目 | 3刷 |
| removeEventHandlerメソッドを使って | removeEventListenerメソッドを使って | 2017/02/24 |
| p.384 | 構文:keyメソッド | 3刷 |
| console.key(index) | storage.key(index) | 2017/02/24 |
| p.399 | 本文 上から2行目 | 3刷 |
| (1)Content-Typeヘッダーに「application/x-wwwform-urlencoded;charset=UTF-8」を指定する | (1)Content-Typeヘッダーに「application/x-www-form-urlencoded;charset=UTF-8」を指定する | 2016/12/28 |
| p.403 | リスト7-26 bm.js | 3刷 |
| anchor.href = \\'http://b.hatena.ne.jp/\\' + bms[i].user | anchor.href = \\'http://b.hatena.ne.jp/\\' + bms[i].user; (行末にセミコロンを追加してください) |
2016/12/28 |
| p.414 | リスト7-32 promise.js | 3刷 |
| asyncxProcess(\\\\\\'トクジロウ\\\\\\').then( | asyncProcess(\\\\\\'トクジロウ\\\\\\').then( | 2016/11/23 |
FAQ
現在、FAQはありません。
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。