書籍詳細(改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで)

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで 書影

ISBN: 978-4-7741-8411-1

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

サポート終了
著者山田祥寛
出版社技術評論社
価格2,980円(税別)
判型B5変判・2色
ページ数456ページ
発売日2016年9月30日
対象レベル初中級

改訂版が刊行されています。詳細はこちらをご覧ください。

JavaScriptの基礎から新記法まできっちり解説

「ECMAScript 2015」による新記法はもちろん、基本からオブジェクト指向構文、Ajax、クライアントサイド開発まで詳しく解説しています。また、テスト、ドキュメンテーション、コーディング規約など現場で避けられない知識もしっかり押さえました。
JavaScript開発者必携の1冊です。
改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで ロゴ

更新履歴

  • 正誤訂正: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はありません。

お問い合わせ

書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。

Powered by メールフォーム 『オレンジフォーム』