パーフェクトjavascript

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

Part1 JavaScript〜overview

1章 JavaScriptの概要

1-1 JavaScriptの見方
1-2 JavaScriptの歴史
1-2-1 JavaScriptのトピック
1-3 ECMAScript
1-3-1 JavaScriptの標準化
1-3-2 見送られたECMAScript第4版
1-4 JavaScriptのバージョン
1-5 JavaScript処理系
1-5-1 クライアントサイドJavaScriptコードの移植性
1-6 JavaScript実行環境
1-6-1 コア言語
1-6-2 ホストオブジェクト
1-7 JavaScript周辺環境
1-7-1 ライブラリ
1-7-2 ソースコード圧縮
1-7-3 統合開発環境IDE
Part2 JavaScript言語仕様

2章 JavaScriptの基礎

2-1 JavaScriptの特徴
2-2 表記について
2-2-1 Print関数
2-3 変数の基礎
2-3-1 変数の使い方
2-3-2 varの省略
2-3-3 定数
2-4 関数の基礎
2-4-1 関数とは
2-4-2 関数宣言と呼び出し
2-4-3 関数リテラル
2-4-4 関数はオブジェクト
2-5 オブジェクトの基礎
2-5-1 オブジェクトとは
2-5-2 オブジェクトリテラル式とオブジェクトの利用
2-5-3 プロパティアクセス
2-5-4 プロパティアクセス(ブラケット)
2-5-5 メソッド
2-5-6 new式
2-5-7 クラスとインスタンス
2-5-8 クラス機能の整理方法
2-5-9 オブジェクトと型
2-6 配列の基礎
▽▽コラム イディオム
3章 JavaScriptの型

3-1 型とは
3-1-1 型に関してJavaとの比較
3-1-2 基本型と参照型
3-2 組み込み型の概要
3-2-1 JavaScriptの基本型
3-3 文字列型
3-3-1 文字列値リテラル
3-3-2 文字列型の演算
3-3-3 文字列型の比較
3-3-4 文字列クラス(Stringクラス)
3-3-5 文字列オブジェクト
3-3-6 文字列値と文字列オブジェクトの混乱の回避
3-3-7 String関数呼び出し
3-3-8 Stringクラスの機能
3-3-9 非破壊的なメソッド
3-4 数値型
3-4-1 数値リテラル
3-4-2 数値型の演算
3-4-3 浮動小数点数の一般的注意
3-4-4 数値クラス(Numberクラス)
3-4-5 Number関数呼び出し
3-4-6 Numberクラスの機能
3-4-7 境界値と特別な数値
3-4-8 NaN
3-5 ブーリアン
3-5-1 ブーリアン
3-5-2 ブーリアンクラス(Booleanクラス)
3-5-3 Booleanクラスの機能
3-6 null型
3-7 undefined型
3-7-1 undefined値
3-8 オブジェクト型
3-8-1 関数型
3-9 型変換
3-9-1 文字列値から数値の型変換
3-9-2 数値から文字列値の型変換
3-9-3 型変換のイディオム
3-9-4 ブーリアン型への型変換
3-9-5 その他の型変換
3-9-6 オブジェクト型から基本型への型変換
3-9-7 基本型からオブジェクト型への型変換
コラム JavaScriptのプロファイラ
4章 文、式、演算子

4-1 式と文の構造
4-2 予約語
4-3 識別子
4-4 リテラル表記
4-5 文とは
4-6 ブロック文(複合文)
4-7 変数宣言文
4-8 関数宣言文
4-9 式文
4-10 空文
4-11 制御文
4-12 if-else文
4-13 switch文
4-14 繰り返し文
4-15 while文
4-16 do-while文
4-17 for文
4-17-1 for文のイディオム
4-18 for in文
4-18-1 配列とfor in文
4-18-2 for in文に関する注意点
4-19 for each in文
4-20 break文
4-21 continue文
4-22 ラベルを使ったジャンプ
4-23 return文
4-24 例外
4-25 その他
4-26 コメント
4-27 式
4-28 演算子
4-29 式の評価
4-30 演算子の優先順序と結合規則
4-31 算術演算子
4-32 文字列連結演算子
4-33 同値演算子
4-34 比較演算子
4-35 in演算子
4-36 instanceof演算子
4-37 論理演算子
4-38 ビット演算子
4-39 代入演算子
4-40 算術代入演算子
4-41 条件演算子(3項演算子
4-42 typeof演算子
4-43 new演算子
4-44 delete演算子
4-45 void演算子
4-46 カンマ(,)演算子
4-47 ドット演算子とブラケット演算子
4-48 関数呼び出し演算子
4-49 演算子と型変換の注意点
5章 変数とオブジェクト

5-1 変数の宣言
5-2 変数と参照
5-2-1 関数の引数(値渡し)
5-2-2 文字列と参照
5-2-3 オブジェクトと参照にまつわる用語の整理
5-3 変数とプロパティ
5-4 変数名の解決
5-5 変数の存在チェック
5-5-1 プロパティの存在チェック
5-6 オブジェクトとは
5-6-1 抽象データ型とオブジェクト指向
5-6-2 インスタンスの協調とオブジェクト指向
5-7 オブジェクトの生成
5-7-1 オブジェクトリテラル
コラム 関数の多値の返り値を受け取るJavaScript独自拡張
5-7-2 コンストラクタとnew式
5-7-3 コンストラクタとクラス定義
5-8 プロパティのアクセス
5-8-1 プロパティ値の更新
5-8-2 ドット演算子とブラケット演算子の使い分け
5-8-3 プロパティの列挙
5-9 連想配列としてのオブジェクト
5-9-1 連想配列
5-9-2 連想配列としてオブジェクトの注意点
5-10 プロパティの属性
5-11 ガベージコレクション
5-12 不変オブジェクト
5-12-1 不変オブジェクトとは
5-12-2 不変オブジェクトの有用性
5-12-3 不変オブジェクトの手法
5-13 メソッド
5-14 this参照
5-14-1 this参照の規則
5-14-2 this参照の注意点
5-15 applyとcall
5-16 プロトタイプ継承
5-16-1 プロトタイプチェーン
5-16-2 プロトタイプチェーンの具体例
5-16-3 プロトタイプ継承とクラス
5-16-4 プロトタイプチェーンのよくある勘違いと__proto__プロパティ
5-16-5 プロトタイプオブジェクト
5-16-6 プロトタイプオブジェクトとECMAScript第5版
5-17 オブジェクトと型
5-17-1 型判定(constructorプロパティ)
5-17-2 constructorプロパティの注意点
5-17-3 型判定(instanceof演算とisPrototypeOfメソッド)
5-17-4 型判定(ダックタイピング)
5-17-5 プロパティの列挙(プロトタイプ継承を考慮)
5-18 ECMAScript第5版のObjectクラス
5-18-1 プロパティオブジェクト
5-18-2 アクセッサ属性
コラム その他の型判定
5-19 標準オブジェクト
5-20 Objectクラス
コラム オブジェクトの互換性
5-21 グローバルオブジェクト
5-21-1 グローバルオブジェクトとグローバル変数
5-21-2 Mathオブジェクト
5-21-3 Errorオブジェクト
6章 関数とクロージャ

6-1 関数宣言文と関数リテラル
6-2 関数呼び出しの整理
6-2-1 関数宣言文の巻き上げ
6-3 引数とローカル変数
6-3-1 argumentsオブジェクト
6-3-2 再帰関数
6-4 スコープ
6-4-1 Webブラウザとスコープ
6-4-2 ブロックスコープ
6-4-3 letとブロックスコープ
6-4-4 入れ子の関数とスコープ
6-4-5 シャドーイング
6-5 関数はオブジェクト
6-5-1 関数名とデバッグ容易性
6-6 Functionクラス
6-6-1 Functionクラスの継承
6-7 入れ子の関数宣言とクロージャ
6-7-1 クロージャの表層的な理解
6-7-2 クロージャの仕組み
6-7-3 クロージャの落とし穴
6-7-4 名前空間の汚染を防ぐ
6-7-5 クロージャとクラス
コラム 式クロージャ
6-8 コールバックパターン
6-8-1 コールバックと制御の反転
6-8-2 JavaScriptとコールバック
コラム イベントリスナ風の実装
7章 データ処理

7-1 配列
7-1-1 JavaScriptの配列
7-1-2 配列の要素アクセス
7-1-3 配列の長さ
7-1-4 配列の要素の列挙
コラム 配列の長さの上限
7-1-5 多次元配列
7-1-6 配列はオブジェクト
7-1-7 Arrayクラス
7-1-8 配列オブジェクトの意味
7-1-9 配列のイディオム
7-1-10 配列の内部
7-1-11 配列風のオブジェクト
7-1-12 イテレータ
7-1-13 ジェネレータ
7-1-14 配列の内包
7-2 JSON
7-2-1 JSON文字列
7-2-2 JSONオブジェクト
7-3 日付処理
7-3-1 Dateクラス
7-4 正規表現
7-4-1 正規表現とは
7-4-2 正規表現の用語
7-4-3 正規表現の文法
7-4-4 JavaScript正規表現
7-4-5 正規表現プログラミング
7-4-6 文字列オブジェクトと正規表現オブジェクト
コラム ECMAScript第5版のstrict mode
Part3 クライアントサイドJavaScript

8章 クライアントサイドJavaScriptとHTML

8-1 クライアントサイドJavaScriptの重要性
8-1-1 Webアプリケーションの発達
8-1-2 JavaScriptの高速化
8-1-3 JavaScriptの役割
8-2 HTMLとJavaScript
8-2-1 Webページを表示するときの処理の流れ
8-2-2 JavaScriptの記述方法と実行タイミング
8-2-3 実行タイミングまとめ
8-3 実行環境と開発環境
8-3-1 実行環境
8-3-2 開発環境
8-4 デバッグ
8-4-1 alert
8-4-2 console
8-4-3 onerror
8-4-4 Firebug, Web Inspector (Developer Tools), Opera Dragonfly
8-5 クロスブラウザ対応
8-5-1 対応すべきブラウザ
8-5-2 実装方法
8-6 Windowオブジェクト
8-6-1 Navigatorオブジェクト
8-6-2 Locationオブジェクト
8-6-3 Historyオブジェクト
8-6-4 Screenオブジェクト
8-6-5 Windowオブジェクトへの参照
8-6-6 Documentオブジェクト
9章 DOM

9-1 DOMとは
9-1-1 DOM Level 1
9-1-2 DOM Level 2
9-1-3 DOM Level 3
コラム DOM Level 0
9-1-4 DOMの記述
9-2 DOMの基礎
9-2-1 タグ、要素、ノード
9-2-2 DOM操作
9-2-3 Documentオブジェクト
9-3 ノードの選択
9-3-1 IDによる検索
9-3-2 タグ名による検索
9-3-3 名前による検索
9-3-4 クラス名による検索
9-3-5 親、子、兄弟
9-3-6 XPath
9-3-7 Selectors API
9-4 ノードの作成・追加
9-5 ノードの内容変更
9-6 ノードの削除
9-7 innerHTML/textContent
9-7-1 innerHTML
9-7-2 textContent
9-8 DOM操作のパフォーマンス
10章 イベント

10-1 イベント駆動型プログラミング
10-2 イベントハンドラ/イベントリスナの設定
10-2-1 HTML要素の属性に指定する
10-2-2 DOM要素のプロパティに指定する
10-2-3 EventTarget.addEventListener()を利用する
10-2-4 イベントハンドラ/イベントリスナ内でのthis
10-3 イベント発火
10-4 イベントの伝播
10-4-1 キャプチャリングフェーズ
10-4-2 ターゲットフェーズ
10-4-3 バブリングフェーズ
10-4-4 キャンセル
10-5 イベントが持つ要素
10-6 標準イベント
10-6-1 DOM Level 2で定義されているイベント
10-6-2 DOM Level 3で定義されているイベント
10-7 独自イベント
11章 実践 クライアントサイドJavaScript

11-1 スタイル
11-1-1 スタイル変更方法
11-1-2 位置の指定
11-1-3 位置
11-1-4 アニメーション
11-2 Ajax
11-2-1 非同期処理の利点
11-2-2 XMLHttpRequest
11-2-3 基本的な処理の流れ
11-2-4 同期通信
11-2-5 タイムアウト
11-2-6 レスポンス
11-2-7 クロスオリジン制限
11-2-8 クロスオリジン通信
11-2-9 JSONP
11-2-10 iframeハック
11-2-11 window.postMessage
11-2-12 XMLHttpRequest Level 2
11-2-13 クロスオリジン通信のセキュリティ問題
11-3 フォーム
11-3-1 フォーム要素
11-3-2 フォームコントロール要素
11-3-3 内容の検証
11-3-4 検証に利用できるイベント
11-3-5 フォームを使ってページ遷移を発生させない方法
12章 ライブラリ

12-1 ライブラリを使うべき理由
12-2 jQueryの特徴
12-3 jQueryの基本
12-3-1 記述例
12-3-2 メソッドチェーン
コラム メソッドチェーンのデメリット
12-4 $関数
12-4-1 セレクタにマッチする要素を抽出する
12-4-2 新しくDOM要素を作成する
12-4-3 既存のDOM要素をjQueryオブジェクトに変換する
12-4-4 DOM構築後のイベントリスナを設定する
12-5 jQueryによるDOM操作
12-5-1 要素の選択
12-5-2 要素の作成・追加・置換・削除
12-6 jQueryによるイベント処理
12-6-1 イベントリスナの登録・削除
12-6-2 イベント専用のイベントリスナ登録メソッド
12-6-3 ready()メソッド
12-7 jQueryによるスタイル操作
12-7-1 基本的なスタイル操作
12-7-2 アニメーション
12-8 jQueryによるAjax
12-8-1 ajax()関数
12-8-2 ajax()のラッパー関数
12-8-3 グローバルイベント
12-9 Deferred
12-9-1 Defferdの基本
12-9-2 状態遷移
12-9-3 後続関数
12-9-4 並列処理
12-10 jQueryプラグイン
12-10-1 jQueryプラグインの利用
12-10-2 jQueryプラグインの作成
12-11 他のライブラリとの共存
12-11-1 $オブジェクトの衝突
12-11-2 $オブジェクトの衝突回避
12-12 ライブラリの利用方法
Part4 HTML5

13章 HTML5概要

13-1 HTML5の歴史
13-1-1 HTML5の登場の経緯
13-2 HTML5の現状
13-2-1 ブラウザの対応状況
13-2-2 Webアプリケーションとネイティブアプリケーション
13-3 HTML5の概要
コラム ブラウザベンダーのHTML5情報ポータル
14章 Webアプリケーション

14-1 History API
14-1-1 History APIとは
14-1-2 ハッシュフラグメント
14-1-3 インターフェース
14-2 ApplicationCache
14-2-1 キャッシュ管理について
14-2-2 キャッシュマニフェスト
14-2-3 ApplicationCache API
14-2-4 オンラインとオフライン
15章 デスクトップ連携

15-1 Drag Drop API
15-1-1 Drag Drop APIとは
15-1-2 インターフェース
15-1-3 基本的なドラッグ&ドロップ
15-1-4 表示のカスタマイズ
15-1-5 ファイルのDrag-In/Drag-Out
コラム DataTransferItemList
15-2 File API
15-2-1 File APIとは
15-2-2 Fileオブジェクト
コラム valueについて
15-2-3 FileReader
15-2-4 data URL
15-2-5 FileReaderSync
16章 ストレージ

16-1 Web Storage
16-1-1 Web Storageとは
コラム オリジンとは
16-1-2 基本操作
16-1-3 storageイベント
16-1-4 Cookieについて
16-1-5 ネームスペースの管理
16-1-6 バージョンの管理
16-1-7 localStorageのエミュレート
16-2 Indexed Database
16-2-1 Indexed Databaseとは
コラム Web SQL Databaseについて
16-2-2 インフラストラクチャ
16-2-3 データベースに接続
16-2-4 オブジェクトストアの作成
16-2-5 データの追加・削除・参照
16-2-6 インデックスの作成
16-2-7 データの検索と更新
16-2-8 データのソート
16-2-9 トランザクション
16-2-10 同期API
17章 WebSocket

17-1 WebSocket概要
17-1-1 WebSocketとは
17-1-2 既存の通信技術
17-1-3 WebSocketの仕様
17-1-4 WebSocketの動作
17-2 基本操作
17-2-1 コネクションの確立
17-2-2 メッセージの送受信
17-2-3 コネクションの切断
17-2-4 コネクションの状態確認
17-2-5 バイナリデータの送受信
17-2-6 WebSocketインスタンスのプロパティ一覧
17-3 WebSocket実践
17-3-1 Node.jsのインストール
17-3-2 サーバサイドの実装
17-3-3 クライアントサイドの実装
17-3-4 クライアントサイドの実装2
18章 Web Workers

18-1 Web Workers概要
18-1-1 Web Workersとは
18-1-2 Web Workersの動作
18-2 基本操作
18-2-1 ワーカの生成
18-2-2 メインスレッド側のメッセージ送受信
18-2-3 ワーカ側のメッセージ送受信
18-2-4 ワーカの削除
18-2-5 外部ファイルの読み込み
18-3 Web Workers実践
18-3-1 ワーカの利用
18-3-2 ワーカの処理を中断する
18-4 共有ワーカ
18-4-1 共有ワーカとは
18-4-2 共有ワーカの生成
18-4-3 共有ワーカのメッセージ送受信
18-4-4 共有ワーカの削除
18-4-5 共有ワーカの応用例
Part5 Web API

19章 Web APIの基礎

19-1 Web APIWebサービス
19-1-1 Web APIが想定するシステム
19-2 Web APIの歴史
19-2-1 スクレイピング
19-2-2 セマンティックWeb
19-2-3 XML
19-2-4 Atom
19-2-5 JSON
19-2-6 SOAP
19-2-7 REST
19-2-8 簡単なまとめ
19-3 Web APIの構成
19-3-1 Web APIの形態
19-3-2 Web APIの利用
19-3-3 RESTful API
19-3-4 APIキー
19-4 ユーザ認証と認可
19-4-1 Webアプリのセッション管理
19-4-2 セッション管理とユーザ認証
19-4-3 Web APIと権限
19-4-4 認証と認可
19-4-5 OAuth
20章 Web APIの実例

20-1 Web APIのカテゴリ
20-2 Google Translate API
20-2-1 準備
20-2-2 動作概要
20-2-3 Web APIの利用コード
20-2-4 ウィジェットGoogle Translate Element)
20-3 Google Maps API
20-3-1 Google Static Maps API
20-3-2 マイマップ
20-3-3 Google Maps APIの概要
20-3-4 Google Maps APIの簡単な例
20-3-5 イベント
20-3-6 Geolocation APIとGeocoding API
20-4 Yahoo! Flickr
20-4-1 Flickr Web APIの利用
20-4-2 FlickrのWeb APIの利用例
20-5 Twitter
20-5-1 検索API
20-5-2 REST API
20-5-3 Twitter JS API @anywhere
20-5-4 Twitter Widget
20-6 Facebook
20-6-1 Facebookアプリの変遷
20-6-2 FacebookJavaScript API
20-6-3 Facebookプラグイン
20-7 OpenSocial
20-7-1 OpenSocialの基本アーキテクチャ
コラム OpenSocialスペックの読み方とActivity
Part6 サーバサイドJavaScript

21章 サーバサイドJavaScriptとNode.js

21-1 サーバサイドJavaScriptの動向
21-2 CommonJS
21-2-1 CommonJSとは
コラム ホストオブジェクトに依存しないライブラリ
21-2-2 CommonJSの動向
21-2-3 モジュール機能
21-3 Node.js
21-3-1 Node.jsとは
21-3-2 nodeコマンド
21-3-3 npmとパッケージ
21-3-4 consoleモジュール
21-3-5 utilモジュール
21-3-6 processオブジェクト
21-3-7 グローバルオブジェクト
21-3-8 Node.jsプログラミングの概要
21-3-9 イベントAPI
21-3-10 バッファ
21-3-11 ストリーム
22章 実践 Node.jsプログラミング

22-1 HTTPサーバ処理
22-1-1 HTTPサーバ処理の基本
22-1-2 リクエスト処理
22-1-3 レスポンス処理
22-1-4 POSTリクエスト処理
22-2 HTTPクライアント処理
22-3 HTTPS処理
22-3-1 opensslコマンドを使う自己証明書の発行方法
22-3-2 HTTPSサーバ
22-4 Socket.IOとWebSocket
22-5 低レイヤのネットワークプログラミング
22-5-1 低レイヤネットワーク処理
22-5-2 ソケットとは
22-5-3 ソケットプログラミングの基本構造
22-5-4 ソケットプログラミングの具体例
22-6 ファイル処理
22-6-1 本節のサンプルコード
22-6-2 ファイルの非同期処理
22-6-3 ファイルの同期処理
22-6-4 ファイル操作系の関数
22-6-5 ファイル読み込み
22-6-6 ファイル書き込み
22-6-7 ディレクトリ操作
22-6-8 ファイルの変更監視
22-6-9 ファイルパス
22-7 タイマー
コラム Node.jsのデバッグ
22-8 Express
22-8-1 URLルーティング
22-8-2 リクエスト処理
22-8-3 レスポンス処理
22-8-4 scaffold作成機能
22-8-5 MVCアーキテクチャ
22-8-6 テンプレート言語Jade
22-8-7 MongoDB(データベース)
22-8-8 Mongooseの実例
22-8-9 ExpressとMongooseを使うWebアプリ





よ、ようやくなんとか一読できた。濃ゆいし、硬派かつ、幅広いのはいつもの通り。
誤字脱字もパーフェクトPHPよりずっと少ない。



いや、ほんと密度が高すぎる。

よくまぁ、こんだけ言語仕様まとめられるなぁ。って感じ。


今まで、jQueryにおんぶに抱っこでほとんど深く勉強してこなかったjavascript

うーむ。難しい。というか、ややこしい。
thisとかプロトタイプベースはやっぱりとっつきにくい。

が、同時に非常に魅力的な言語。

魅力的な言語はどれも読んでて、ため息がでますなぁ。JavaScriptも本当に魅力的で、できない事はほぼない。ってくらい汎用性が高い。

もちろんサーバーサイドに関してはやっぱりperlPHPなんかとは比べ物にならないのだけれど、それでも大体のことはできる。すげぇ。




いやはや。何回かくり返し読みたい。というか、読む。