Book description
ECMAScript 2015(ES2015)の入門書。シンプルな例題を多用しブラウザやnodeコマンドで試しながら新しいJavaScriptを楽しく学びます。本書を読めば、letやconstによる宣言とスコープ、関数の基本と高度な使い方、オブジェクトとオブジェクト指向プログラミング、イテレータやジェネレータやプロキシといったES2015の新機能、非同期プログラミング、クライアントサイドのDOMやjQuery、サーバーサイドのNode.jsなど、JavaScriptの最新バージョンを使った開発に関する総括的な知識をバランスよく得られます。日本語版では、ES2016およびES2017の新機能の紹介も加えました。
Table of contents
- 大扉
- 原書大扉
- 献辞
- 訳者まえがき
- まえがき
- この本の対象読者
- この本の非対象読者
- 意見と質問
- 表記上のルール
- 謝辞
- 1章 JavaScriptの歴史と開発環境
- 1.1 JavaScriptの簡単な歴史
- 1.2 ES2015
- 1.3 開発環境とツール
- 1.4 ES2015での開発
- 1.5 ES2015の機能
- 1.6 Node.jsのインストールと実行
- 1.6.1 Node.jsによるJavaScriptプログラムの実行
- 1.6.2 nodeコマンド
- 2章 初めてのJavaScriptアプリ
- 2.1 準備
- 2.2 ツール
- 2.3 コメント
- 2.4 3つのファイルに分解
- 2.5 jQuery
- 2.6 簡単な図形の表示
- 2.7 繰り返し
- 2.8 クリックの検知
- 2.9 Hello, World
- 3章 変数、定数、リテラル、データ型
- 3.1 変数と定数
- 3.2 変数か定数か
- 3.3 識別子
- 3.4 リテラル
- 3.5 プリミティブ型とオブジェクト
- 3.6 数値
- 3.7 文字列
- 3.7.1 エスケープ
- 3.7.2 特殊文字
- 3.7.3 テンプレートリテラル
- 3.7.4 複数行にわたる文字列
- 3.7.5 文字列としての数値
- 3.8 論理値
- 3.9 シンボル
- 3.10 nullとundefined
- 3.11 オブジェクト
- 3.12 数値、文字列、論理値に対応するオブジェクト
- 3.13 配列
- 3.14 配列やオブジェクトの最終要素のあとの「,」
- 3.15 日時
- 3.16 正規表現
- 3.17 マップ(Map)とセット(Set)
- 3.18 データの型変換
- 3.18.1 数値への変換
- 3.18.2 文字列への変換
- 3.18.3 論理値への変換
- 3.19 まとめ
- 4章 制御フロー
- 4.1 制御フロー入門
- 4.1.1 whileループ
- 4.1.2 ブロック文
- 4.1.3 ホワイトスペース
- 4.1.4 ヘルパー関数
- 4.1.5 if...else文
- 4.1.6 do...while ループ
- 4.1.7 forループ
- 4.1.8 if文
- 4.1.9 すべてを統合
- 4.2 JavaScriptの制御フロー文
- 4.2.1 制御フローの例外
- 4.2.2 if...else文のつなぎ方
- 4.2.3 構文の詳細
- 4.2.4 while文
- 4.2.5 if...else文
- 4.2.6 do...while文
- 4.2.7 for文
- 4.2.8 その他のforループパターン
- 4.2.9 switch文
- 4.2.10 for...inループ
- 4.2.11 for...ofループ
- 4.3 便利な制御フローパターン
- 4.3.1 条件の入れ子を減らすためにcontinueを使う方法
- 4.3.2 不要な計算を避けるためにbreakやreturnを使う方法
- 4.3.3 ループ終了後のループ変数の値を使う方法
- 4.3.4 リストを変更するときにチェックを降順に行う方法
- 4.4 まとめ
- 5章 式と演算子
- 5.1 演算子
- 5.2 算術演算子
- 5.3 演算子の優先順位
- 5.4 比較演算子
- 5.4.1 厳密等価演算子と等価演算子
- 5.4.2 関係演算子
- 5.4.3 数値を比較する際の留意点
- 5.5 文字列連結
- 5.6 論理演算子
- 5.6.1 真と見なされる値と偽と見なされる値
- 5.6.2 AND、OR、NOT
- 5.6.3 短絡評価
- 5.6.4 論理値ではない被演算子を用いた論理演算
- 5.7 条件演算子
- 5.8 カンマ演算子
- 5.9 グループ化演算子
- 5.10 ビット演算子
- 5.11 typeof演算子
- 5.12 void演算子
- 5.13 代入演算子
- 5.14 分割代入(デストラクチャリング)
- 5.15 オブジェクト演算子と配列演算子
- 5.16 テンプレートリテラル内の式
- 5.17 式と制御フローのパターン
- 5.17.1 if...else文を条件演算子を使った構文に変換
- 5.17.2 if文の短絡論理ORへの変換
- 5.18 まとめ
- 6章 関数
- 6.1 戻り値
- 6.2 呼び出しと参照
- 6.3 関数の引数
- 6.3.1 引数と関数
- 6.3.2 引数の分割代入
- 6.3.3 デフォルト引数
- 6.4 オブジェクトのメソッド
- 6.4.1 メソッドの省略記法
- 6.5 this
- 6.6 関数式と無名関数
- 6.7 アロー関数
- 6.8 call、apply、bind
- 6.9 まとめ
- 7章 スコープ
- 7.1 スコープと存在
- 7.2 静的スコープと動的スコープ
- 7.3 グローバルスコープ
- 7.4 ブロックスコープ
- 7.5 変数の隠蔽
- 7.6 関数、クロージャ、静的スコープ
- 7.7 IIFE——即座に実行される関数式
- 7.8 関数のスコープと巻き上げ
- 7.9 関数の巻き上げ
- 7.10 TDZ(Temporal Dead Zone)
- 7.11 strictモード
- 7.12 まとめ
- 8章 配列
- 8.1 配列の基本
- 8.2 配列要素の操作
- 8.2.1 先頭あるいは最後の要素に対する操作
- 8.2.2 複数要素の追加
- 8.2.3 部分配列
- 8.2.4 途中の要素の削除や途中への要素の追加
- 8.2.5 配列内の要素の削除や置換
- 8.2.6 配列を特定の値で埋める
- 8.2.7 逆転とソート
- 8.3 検索
- 8.4 mapとfilter
- 8.5 reduce
- 8.6 配列関連のメソッドと削除された要素、定義されていない要素
- 8.7 join
- 8.8 まとめ
- 9章 オブジェクトとオブジェクト指向プログラミング
- 9.1 プロパティの列挙
- 9.1.1 for...in
- 9.1.2 Object.keys
- 9.2 オブジェクト指向プログラミング
- 9.2.1 クラスとインスタンス生成
- 9.2.2 アクセッサプロパティ
- 9.2.3 クラスは関数
- 9.2.4 プロトタイプ
- 9.2.5 静的メソッド
- 9.2.6 継承
- 9.2.7 ポリモーフィズム
- 9.2.8 プロパティの列挙(補足)
- 9.2.9 文字列による表現
- 9.3 多重継承、ミックスイン、インタフェース
- 9.4 まとめ
- 10章 マップとセット
- 10.1 マップ(Map)
- 10.2 ウィークマップ(WeakMap)
- 10.3 セット(Set)
- 10.4 ウィークセット(WeakSet)
- 10.5 オブジェクトかマップか
- 11章 例外とエラー処理
- 11.1 Errorオブジェクト
- 11.2 例外処理(try...catch)
- 11.3 例外のスロー
- 11.4 例外処理とコールスタック
- 11.5 try...catch...finally
- 11.6 例外処理は例外に限る
- 12章 イテレータとジェネレータ
- 12.1 イテレータ
- 12.1.1 配列とイテレータ
- 12.1.2 イテレータのプロトコル
- 12.1.3 無限の値を供給するイテレータ
- 12.2 ジェネレータ
- 12.2.1 yield式と双方向コミュニケーション
- 12.2.2 ジェネレータとreturn
- 12.3 まとめ
- 13章 関数のさまざまな利用方法
- 13.1 サブルーチンとしての関数
- 13.2 値を返すサブルーチンとしての関数
- 13.3 純粋関数としての関数
- 13.4 なぜ純粋関数か
- 13.4.1 関数はオブジェクト
- 13.5 IIFEと非同期のコード
- 13.6 関数と変数
- 13.6.1 関数を配列に記憶
- 13.6.2 関数に関数を渡す
- 13.6.3 関数から関数を返す
- 13.7 再帰
- 13.8 まとめ
- 14章 非同期プログラミング
- 14.1 非同期処理のアナロジー
- 14.2 コールバック
- 14.2.1 setIntervalとclearInterval
- 14.2.2 スコープと非同期の実行
- 14.2.3 エラーファースト・コールバック
- 14.2.4 コールバック地獄
- 14.3 プロミス(Promise)
- 14.3.1 プロミスの生成
- 14.3.2 プロミスの利用
- 14.3.3 プロミスの基本パターン
- 14.3.4 プロミスのチェイニング
- 14.3.5 Promise.allとPromise.race
- 14.3.6 未確定の(unsettled)プロミスを防止する
- 14.4 ジェネレータ
- 14.4.1 ジェネレータランナー
- 14.4.2 ジェネレータランナーの例外処理
- 14.5 まとめ
- 15章 日時
- 15.1 タイムゾーン、タイムスタンプ、UNIXエポック
- 15.2 Dateオブジェクトの生成
- 15.3 Moment.js
- 15.4 JavaScriptによる日時関連の処理
- 15.5 日時の生成
- 15.5.1 サーバーにおける日時の生成
- 15.5.2 ブラウザにおける日時の生成
- 15.6 日時の受け渡し
- 15.7 日時関連の文字列の表示
- 15.8 月、日、曜日、時、分の取得
- 15.9 日時の比較
- 15.10 日時の演算
- 15.11 相対的な日時の利用
- 15.12 まとめ
- 16章 Math
- 16.1 数値のフォーマット指定
- 16.1.1 固定小数点数
- 16.1.2 指数表現
- 16.1.3 精度の指定
- 16.1.4 基数の指定
- 16.1.5 より細かなフォーマット指定
- 16.2 定数
- 16.3 代数関連の関数
- 16.3.1 累乗
- 16.3.2 対数関連の関数
- 16.3.3 その他の関数
- 16.3.4 擬似乱数発生
- 16.4 三角関数
- 16.5 双曲線関数
- 17章 正規表現
- 17.1 単純なマッチングと置換
- 17.2 正規表現の生成
- 17.3 正規表現を用いた検索
- 17.4 正規表現を用いた置換
- 17.5 入力文字列の「消費」
- 17.6 ORを表す正規表現
- 17.7 正規表現によるマッチングの限界
- 17.8 文字集合
- 17.9 文字集合の略記法
- 17.10 繰り返し
- 17.11 メタ文字「.」とエスケープ
- 17.11.1 ワイルドカード
- 17.12 グループ化
- 17.13 最長マッチ、最短マッチ
- 17.14 後方参照
- 17.15 グループの置換
- 17.16 関数を用いた置換
- 17.17 行頭や行末とのマッチング
- 17.18 英単語の境界のマッチング
- 17.19 先読み
- 17.20 正規表現の動的な生成
- 17.21 まとめ
- 18章 ウェブブラウザのJavaScript
- 18.1 ES5かES2015か
- 18.2 ドキュメントオブジェクトモデル(DOM)
- 18.3 DOMのgetメソッド
- 18.4 DOM要素に関するクエリー
- 18.5 DOM要素の操作
- 18.6 DOM要素の生成
- 18.7 要素のスタイル
- 18.8 data属性
- 18.9 イベント
- 18.9.1 イベントのキャプチャリングとバブリング
- 18.9.2 イベントの種類
- 18.10 Ajax
- 18.11 まとめ
- 19章 jQuery
- 19.1 jQueryと「$」
- 19.2 jQueryの利用
- 19.3 DOMのロードを待つ
- 19.4 jQueryにラップされたDOM要素
- 19.5 要素の操作
- 19.6 jQueryオブジェクトのアンラップ
- 19.7 Ajax
- 19.8 まとめ
- 20章 Node.js
- 20.1 Nodeの基本
- 20.2 モジュール
- 20.3 コアモジュール、ファイルモジュール、npmモジュール
- 20.4 関数モジュールを使ったモジュールのカスタマイズ
- 20.5 ファイルシステムへのアクセス
- 20.6 プロセス
- 20.7 OS
- 20.8 子プロセス
- 20.9 ストリーム
- 20.10 ウェブサーバー
- 20.11 まとめ
- 21章 オブジェクトのプロパティに関する詳細
- 21.1 ゲッターとセッター
- 21.2 プロパティのディスクリプタ
- 21.3 オブジェクトの保護
- 21.4 プロキシ
- 21.5 まとめ
- 22章 JavaScript関連の情報源
- 22.1 オンラインのドキュメント
- 22.2 ニュースレター
- 22.3 ブログおよびチュートリアル
- 22.4 オープンソースプロジェクトへの貢献
- 22.5 まとめ
- 付録A 予約語
- 付録B 演算子の優先順位
- 付録C 開発ツールのインストール
- C.1 ターミナル
- C.2 Gitのインストール
- C.2.1 macOS
- C.2.2 Windows
- C.2.3 Linux
- C.3 プロジェクトルート
- C.4 Gitを使ったバージョン管理
- C.5 npmによるパッケージ管理
- C.6 ビルドツールのGulp
- C.7 プロジェクトの構成
- C.8 トランスパイラー
- C.9 GulpでBabelを実行
- C.10 lint
- 付録D ES2016とES2017の動向
- D.1 ECMAScript 2016
- D.1.1 累乗を表す演算子「**」
- D.1.2 Array.prototype.includes
- D.2 ECMAScript 2017
- D.2.1 関数構文の末尾カンマの許容
- D.2.2 文字列用のメソッドpadStartとpadEnd
- D.2.3 Object.entriesおよびObject.values
- D.2.4 Object.getOwnPropertyDescriptors
- D.2.5 async/await
- 著者紹介
- 奥付
Product information
- Title: 初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
- Author(s):
- Release date: January 2017
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873117836
You might also like
book
詳説 イーサネット 第2版
イーサネット技術についての解説書。本書では、ファーストイーサネットやギガビットイーサネットなどの従来技術だけでなく、10ギガ、40ギガ、100ギガビットなど最新のイーサネット仕様を詳しく解説します。また、全二重イーサネット、オートネゴシエーション、Power over Ethernet、Energy Efficient Ethernet、構造化ケーブリングシステム、スイッチを用いたネットワークの設計、ネットワーク管理、ネットワークのトラブルシューティングのテクニックなども解説します。ネットワークの設計、監視、保守、障害時対応までを網羅し、信頼性の高いネットワークの構築を支援します。
book
データサイエンス講義
コロンビア大学のデータサイエンス入門講義をベースとした本書では、データサイエンスを行う上で、どのようなプロセスが必要か、データサイエンティストとしてはどのようなスキルセットが必要で、どのような思考方法を選択する必要があるのかを実例とともに紹介します。Google、Microsoft、Facebookをはじめとした有名企業で使われているアルゴリズムや分析手法の紹介など、興味深い話題や事例を豊富に収録。幅広い解説で、データサイエンティストの参考になるトピックが満載の一冊です。
book
レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
レガシーコードとは、バグを多く含み、壊れやすく拡張が難しいコードを指します。このようなコードの保守と管理には多大な労力がつぎ込まれることになります。しかも一度作ってしまったレガシーコードの質を上げるには、初めから質の高いコードを作るよりも膨大なコストがかかります。 本書では、ソフトウェア開発において、初めからレガシーコードを作りださないためのプラクティスを9つ挙げて解説します。プロダクトオーナーは目的を語り、やり方は開発者に任せること、小さなバッチで開発を進めること、継続的に統合すること、チームメンバーで協力することなど、日々の開発に取り入れる考え方と具体的な実践について各章で分かりやすく解説します。 信頼性や拡張性が高いソフトウェアをリリースしたい開発者、運用管理者、マネージャに必携の一冊です。
book
戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニック
ビッグデータ時代とも言われる昨今においては、膨大なデータをビジネスの枠組みの中に組み込んで活用することが重要課題となっています。つまり、データ収集を行ってビジネスの全体像を把握し、適切なデータ分析を行って正確な予測をした上でビジネス戦略を決めることが求められています。本書は、データをビジネスに活かすために身に付けておくべき基本的な考え方と、データマイニングやモデリングの根底に存在するコンセプトについて、体系的に解説しています。データサイエンスの重要性とその威力を学べる一冊です。