開眼! JavaScript

―言語仕様から学ぶJavaScriptの本質

[cover photo]
TOPICS
Programming , Web , JavaScript
発行年月日
PRINT LENGTH
196
ISBN
978-4-87311-621-1
原書
JavaScript Enlightenment
FORMAT
Print PDF
Ebook
2,420円
Ebookを購入する
Print
2,420円

本書は、JavaScriptの言語的特性で知っておくべきポイントをまとめた書籍です。JavaScriptの「オブジェクト」の理解を中心に据えて、JavaScriptをひと通り経験した人が陥りがちな落とし穴であるthis、プロトタイプチェーン(継承)、スコープチェーンなどをサンプルを使って解説します。 コンパクトにまとめているので、jQueryなどのライブラリは使っているが言語仕様にはあまり馴染みのない開発者や、他の言語を習得していてJavaScriptのクセを把握したいエンジニアが、短い時間でJavaScriptの特性についての理解を深めるのに最適な書籍です。「どのように」、「なぜ」動作するのかを知ることで、JavaScriptを心から理解する「目覚め」を体験してください。

目次

訳者まえがき
はじめに

1章 JavaScriptオブジェクト
    1.1 オブジェクトの生成
    1.2 コンストラクタ関数は	オブジェクトインスタンスを構築して返す
    1.3 ネイティブ/ビルトインオブジェクトのコンストラクタ
    1.4 ユーザ定義の(ネイティブではない)コンストラクタ関数
    1.5 new演算子とコンストラクタ関数でインスタンス生成
    1.6 リテラルを使って値を生成
    1.7 プリミティブ型(基本型)の値
    1.8 null、undefined、'string'、10、true、falseはオブジェクトではなくプリミティブ型
    1.9 プリミティブ値はどのように保存・複製されるか
    1.10 プリミティブ値は、値そのものを比較
    1.11 プリミティブ型の文字列、数値、真偽値はオブジェクトのように扱うとオブジェクトのように
        ふるまう
    1.12 オブジェクト(複合型の値)
    1.13 オブジェクトはどのように保存・複製されるか
    1.14 オブジェクトは同値判定に参照を使用
    1.15 オブジェクトは動的なプロパティを持つ
    1.16 typeof演算子の戻り値
    1.17 動的プロパティはミュータブル(可変)オブジェクトを可能にする
    1.18 すべてのコンストラクタのインスタンスはコンストラクタ関数にポイントする
        constructorプロパティを持つ
    1.19 instanceof演算子を使ってコンストラクタ関数を特定する
    1.20 インスタンスは自身のプロパティを持つことができる(インスタンスプロパティ)
    1.21 「JavaScriptオブジェクト」と「Object()オブジェクト」の意味

2章 オブジェクトとプロパティを扱う
    2.1 オブジェクトはすべての値をプロパティとして格納できる
    2.2 オブジェクトと配列でツリー構造や多次元配列を実現
    2.3 ドット記法とブラケット記法でオブジェクトのプロパティにアクセス
    2.4 delete演算子でプロパティを削除する
    2.5 プロパティへの参照はどのように解決されるのか
    2.6 hasOwnProperty()を使って、プロパティがプロトタイプチェーン経由ではないことを確認
    2.7 in演算子を使って、オブジェクトがプロパティを保持しているかどうかを確認する
    2.8 for-inループを使って、プロパティを列挙する
    2.9 ホストオブジェクト
    2.10 Underscore.jsを使ってオブジェクトを拡張する

3章 オブジェクト(Object())
    3.1 Object()オブジェクト
    3.2 Object()のパラメータ
    3.3 Object()が持つプロパティとメソッド
    3.4 Object()のインスタンスのプロパティとメソッド(String.prototypeのプロパティ)
    3.5 Object()オブジェクトをオブジェクトリテラルで生成する
    3.6 すべてのオブジェクトはObject.prototypeから継承する

4章 関数(Function())
    4.1 Function()オブジェクト
    4.2 Function()のパラメータ
    4.3 Function()が持つプロパティとメソッド
    4.4 Function()のインスタンスのプロパティとメソッド(Function.prototypeのプロパティ)
    4.5 関数は常に値を返す
    4.6 JavaScriptの関数は第一級関数
    4.7 関数に引数を渡す
    4.8 thisとargumentsはすべての関数本体で利用できる
    4.9 arguments.callee
    4.10 関数インスタンスのlengthプロパティとarguments.length
    4.11 引数を再定義
    4.12 関数の実行を中断
    4.13 関数の定義方法(宣言、式、もしくはコンストラクタ)
    4.14 関数の実行方法(関数、メソッド、コンストラクタ、もしくはcall()とapply())
    4.15 無名関数
    4.16 関数式を即時実行
    4.17 無名関数を即時実行
    4.18 関数は入れ子可能
    4.19 関数を関数に渡し、関数から関数を返す
    4.20 関数宣言を使って、定義される前に関数を実行する(関数の巻き上げ)
    4.21 関数は自身を呼ぶ事ができる(再帰)

5章 グローバルオブジェクト
    5.1 グローバルオブジェクト
    5.2 グローバル関数
    5.3 グローバルプロパティ、グローバル変数
    5.4 グローバルオブジェクトにアクセスする
    5.5 グローバルオブジェクトは暗黙的に参照される

6章 this
    6.1 thisとは何か、およびthisは何を参照するか
    6.2 thisの値はどのように決められるのか?
    6.3 入れ子関数内では、thisはグローバルオブジェクトを参照する
    6.4 入れ子関数内でthisを見失う問題をスコープチェーンを使って回避する
    6.5 call()やapply()を使ってthisの値をコントロールする
    6.6 thisキーワードをユーザ定義のコンストラクタ関数で使う
    6.7 プロトタイプメソッド内のthisは生成されるインスタンスを参照する

7章 スコープとクロージャ
    7.1 JavaScriptのスコープ
    7.2 JavaScriptはブロックスコープを持たない
    7.3 関数内で変数を定義する際は常にvarを使い、スコープの穴を避ける
    7.4 スコープチェーン(静的スコープ)
    7.5 スコープチェーンの検索は最初に発見した値を返す(マスキング)
    7.6 スコープは関数実行時ではなく関数定義時に決められる
    7.7 クロージャはスコープチェーンによって生成される
    7.8 グローバルスコープで宣言されている関数もクロージャである

8章 関数のprototypeプロパティ
    8.1 プロトタイプチェーン
    8.2 なぜprototypeプロパティが重要なのか
    8.3 prototypeプロパティはすべてのFunction()インスタンスに自動的に付与される
    8.4 prototypeプロパティのデフォルト値はObject()オブジェクト
    8.5 コンストラクタ関数から生成されたインスタンスはそのコンストラクタの
        prototypeプロパティにリンクする
    8.6 プロトタイプチェーンの終着点はObject.prototype
    8.7 プロトタイプチェーンは最初に見つけたプロパティを返す
    8.8 prototypeプロパティに新しいオブジェクトを設定するとデフォルトの
        constructorプロパティを失う
    8.9 プロトタイプからプロパティを継承するインスタンスは常に最新の値を取得
    8.10 prototypeプロパティを新しいオブジェクトに置き換えた場合、過去のインスタンスは
        更新しない
    8.11 ユーザ定義コンストラクタもプロトタイプ継承を行うことができる
    8.12 継承チェーンを生成する

9章 配列(Array())
    9.1 Array()オブジェクト
    9.2 Array() パラメータ
    9.3 Array()のプロパティとメソッド
    9.4 Array()のインスタンスのプロパティとメソッド(Array.prototypeのプロパティ)
    9.5 配列を生成する
    9.6 要素の追加・変更
    9.7 lengthとインデックス
    9.8 指定した数の要素を持った配列を生成する
    9.9 配列のlengthを設定して要素の追加・削除
    9.10 配列を配列に格納(多次元配列)
    9.11 配列の要素を前から・後ろからループする

10章 String()
    10.1 String()オブジェクト
    10.2 String()で文字列オブジェクトを生成、そして値を文字列に変換
    10.3 String()のプロパティとメソッド
    10.4 String()のインスタンスのプロパティとメソッド(String.prototypeのプロパティ)

11章 Number()
    11.1 Number()オブジェクト
    11.2 整数と小数
    11.3 Number()に引数を渡して数値に変換
    11.4 Number()のプロパティとメソッド
    11.5 Number()のインスタンスのプロパティとメソッド(Number.prototypeのプロパティ)

12章 Boolean()
    12.1 Boolean()オブジェクト
    12.2 Boolean()のパラメータ
    12.3 Boolean()のプロパティとメソッド
    12.4 Boolean()のインスタンスのプロパティとメソッド(Boolean.prototypeのプロパティ)
    12.5 真偽値オブジェクトは格納されている値がfalseであってもtrueと評価される
    12.6 いくつかの値はfalse、それ以外はすべてtrueに変換

13章 プリミティブ型文字列、数値、真偽値
    13.1 プリミティブ値は、プロパティにアクセスされるとオブジェクトに変換される
    13.2 文字列、数値、真偽値は常にプリミティブ型を使う

14章 null
    14.1 null
    14.2 typeof nullは'object'を返す

15章 undefined
    15.1 undefined
    15.2 JavaScript ECMA-262 Edition 3以降ではundefined変数が存在

16章 Math関数
    16.1 ビルトインMathオブジェクト
    16.2 Mathが持つプロパティとメソッド
    16.3 Mathはコンストラクタ関数ではない
    16.4 Mathオブジェクトは変更・削除不可

付録A レビュー

付録B 終わりに

索引