開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

キーフレーズ

JavaScript prototype () コンストラクタ console var オプジェクト プロバティ function 関数 bject 10g myArray new String オブジェクト this undefined log true constructor 文字列 Array Number cody onsole 生成 出力 myFunction インスタンス 演算子 typeof スコープ Function return 場合 false メソッド チェーン null Person gender プロトタイプ プリミテイプ ean object 配列 myString bar JavaSc length Object Math string window 参照 返す 実行 定義 arguments プリミティブ 変数 getGender living NOTE アクセス ototype 無名関数 001 foolnstance 持っ 引数 グローバル グローバルオプジェクト 格納 number ipt 使っ クロージャ join 使用 数値 age myNumber 要素 継承 プラウザ male prop proto myObject ジェクト コード Edition リテラル funcArray sfiddle toString

目次

目 次 訳者まえがき . はじめに 1 章 JavaScript オブジェクト .. 1.1 1.2 1.4 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 オプジェクトの生成… コンストラクタ関数はオプジェクトインスタンスを構築して返す プリミテイプ型 ( 基本型 ) の値 .. リテラルを使って値を生成 .. new 演算子とコンストラクタ関数でインスタンス生成 .. ユーザ定義の ( ネイテイプではない ) コンストラクタ関数 .. … 10 ネイテイプ / ビルトインオプジェクトのコンストラクタ .. … 15 … 14 … 12 18 プリミテイプ値はどのように保存・複製されるか 17 なくプリミテイプ型 null 、 undefined 、 'stringk 10 、 true 、 false はオプジェクトでは プリミテイプ値は、値そのものを比較 .. … 19 プリミテイプ型の文字列、数値、真偽値はオプジェクトのように 扱うとオプジェクトのようにふるまう . オプジェクト ( 複合型の値 ) . オプジェクトはどのように保存・複製されるか . オプジェクトは同値判定に参照を使用 .. オプジェクトは動的なプロバティを持つ … 21 … 22 … 23 … 24 25 呼 peof 演算子の戻り値 25

目次 XVI 動的プロバティはミュータブル ( 可変 ) オプジェクトを可能に 1.17 … 27 する .. すべてのコンストラクタのインスタンスはコンストラクタ関数に 1.18 ポイントする constructor プロバティを持つ .. … 28 instanceof 演算子を使ってコンストラクタ関数を特定する .. … 30 インスタンスは自身のプロバティを持っことができる ( インスタンスプロバティ ) . … 31 「 JavaScript オプジェクト」と「 Object() オプジェクト」の意味 33 2 章 オブジェクトとプロバティを扱う . .. 35 オプジェクトはすべての値をプロバティとして格納できる .. … 35 オプジェクトと配列でツリー構造や多次元配列を実現… … 36 ドット記法とプラケット記法でオプジェクトのプロバティに アクセス .. delete 演算子でプロバティを削除する .. 2.4 2.5 プロバテイへの参照はどのように解決されるのか hasOwnPr 叩 erty() を使って、プロバティがプロトタイプ 2.6 チェーン経由ではないことを確訒 in 演算子を使って、オプジェクトがプロバティを保持している かどうかを確認する .. for - in ループを使って、プロバティを列挙する .. 2.8 ホストオプジェクト 2.9 Underscore.js を使ってオプジェクトを拡張する .. 2.10 3 章 オブジェクト (Object()).. Object() オプジェクト Object() のパラメータ Object() が持つプロバティとメソッド .. Object() のインスタンスのプロバティとメソッド (string. prototype のプロバティ ) 57 Object() オプジェクトをオプジェクトリテラルで生成する… .. 58 1.19 1.20 1.21 1 ワつひ ワ朝ワワ 8 一 -1 -1 -4 -4 45 2.7 ・ 4 4 -4 -4 5 5 6 療 5 -1 ワ朝 00 -4 っ 0 っ 0 3.5

目次ー xvii 3.6 すべてのオプジェクトは Object. prototype から継承する .. 4 章 関数 (Function( ) ) .. Function() オプジェクト . 4.1 Function() のパラメータ . 4.2 Function() が持つプロバティとメソッド . 4.3 Function ( ) のインスタンスのプロバティとメソッド 4.4 (Function. prototype のプロバティ ) 63 4.5 関数は常に値を返す… … 64 JavaScript の関数は第一級関数 .. 4.6 … 64 4.7 関数に引数を渡す .. … 66 4.8 this と arguments はすべての関数本体で利用できる . ... 66 4.9 arguments. callee.. … 67 関数インスタンスの length プロバティと arguments. length.... 68 4.10 引数を再定義… 4.11 … 68 関数の実行を中断 4.12 69 関数の定義方法 ( 宣言、式、もしくはコンストラクタ ) . 4.13 … 70 関数の実行方法 ( 関数、メソッド、コンストラクタ、もしくは 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 グローバルプロバティ、グロ … 60 -1 ワ 3 0 け 0- ワ 3 ワ 0 っ 0 -4 7

XViii ー 目次 グローバルオプジェクトにアクセスする .. 5.4 グローバルオプジェクトは暗黙的に参照される .. 5.5 ( 1 ワ 0 5 【 06 一 8 一 8 8 6 章 this . 6.1 this とは何か、および this は何を参照するか . this の値はどのように決められるのか ? . 6.2 6.3 入れ子関数内では、 this はグローバルオプジェクトを参照する 6.4 入れ子関数内で this を見失う問題をスコープチェーンを使って 回避する .. … 89 call() や叩 ply ( ) を使って this の値をコントロールする .. … 90 6.5 6.6 this キーワードをユーザ定義のコンストラクタ関数で使う .. … 91 6.7 プロトタイプメソッド内の this は生成されるインスタンスを 参照する . スコープとクロージャ .. 7 章 JavaScript のスコープ JavaScript はプロックスコープを持たない 7.2 7.3 関数内で変数を定義する際は常に var を使い、スコープの穴を 避ける .. スコープチェーン ( 静的スコープ ) .. スコープチェーンの検索は最初に発見した値を返す 99 スコープは関数実行時ではなく関数定義時に決められる .. … 100 7.6 クロージャはスコープチェーンによって生成される .. … 101 7.7 グローバルスコープで宣言されている関数もクロージャである 7.8 … 106 … 107 … 107 … 110 … 88 … 93 5 5 6 9 “ 9 、 9 … 97 … 98 7.4 7.5 ( マスキング ) 8 章 関数の prototype プロバティ . 8.1 プロトタイプチェーン .. なぜ proto Ⅳ pe プロバティが重要なのか . 8.2

目次ー prototype プロバティはすべての Function() インスタンスに XIX … 111 8.6 8.7 8.8 8.9 8.11 8.12 8.3 8.4 8.5 8.10 自動的に付与される… proto pe プロバティのデフォルト値は Object ( ) オプジェクト … 116 … 114 … 111 デフォルトの constructor プロバティを失う . proto 呼 pe プロバティに新しいオプジェクトを設定すると プロトタイプチェーンは最初に見つけたプロバティを返す… 115 プロトタイプチェーンの終着点は ()bject. prototype.. そのコンストラクタの prototype プロバティにリンクする . … 112 コンストラクタ関数から生成されたインスタンスは プロトタイプからプロバティを継承するインスタンスは常に最新 の値を取得… … 117 proto 呼 pe プロバティを新しいオプジェクトに置き換えた場合、 過去のインスタンスは更新しない . … 118 ユーザ定義コンストラクタもプロトタイプ継承を行うことが できる .. 継承チェーンを生成する .. 9 章 配列 (Array( ) ) .. 9.1 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 Array() オプジェクト Array( ) のインスタンスのプロバティとメソッド Array() のプロバティとメソッド .. 配列の要素を前から・後ろからループする .. 配列を配列に格納 ( 多次元配列 ) .. 配列の length を設定して要素の追加・削険 指定した数の要素を持った配列を生成する .. length とインデックス .. 要素の追加・変更 .. 配列を生成する .. (Array. prototype のプロバティ ) . … 119 … 121 … 1 25 125 131 … 130 … 130 ... 129 … 128 … 127 … 127 … 132 … 131

xx 一目次 1 0 章 1 1 章 1 2 章 1 3 章 String( ) .. … 1 35 … 135 10.1 10.2 10.3 10.4 String() オプジェクト .. String() で文字列オプジェクトを生成、そして値を文字列に 変換… String() のプロバティとメソッド . String() のインスタンスのプロバティとメソッド (String. prototype のプロバティ ) . Number( ) . 11.1 11.2 11.3 11.4 11.5 Number() オプジェクト .. 整数と小数… Number() に引数を渡して数値に変換 . Number() のプロバティとメソッド . Number( ) のインスタンスのプロバティとメソノト (Number. prototype のプロバティ ).. BooIean( ) . … 136 … 137 … 137 … 1 41 … 141 … 142 142 … 144 … 144 ... 147 … 147 … 147 … 148 … 148 12.1 12.2 12.3 12.4 12.5 13.1 13.2 12.6 Boolean() オプジェクト .. Boolean() のパラメータ .. B001ean() のプロバティとメソッド .. Boolean ( ) のインスタンスのプロバティとメソノト (Boolean. prototype のプロバティ ).. 真偽値オプジェクトは格納されている値が false であっても true と評価される 149 いくつかの値は false 、それ以外はすべて true に変換 .. プリミティプ型文字列、数値、真偽値 .. … 150 … 1 51 プリミテイプ値は、プロバティにアクセスされるとオプジェクト に変換される 151 文字列、数値、真偽値は常にプリミテイプ型を使う .. ... 152

1 4 章 1 5 章 1 6 章 付録 A 付録 B 索引… null.. 14.1 14.2 null.. typeof null は 'object' を返す .. undefined.. ー XXi … 1 55 … 155 … 155 … 1 57 … 157 目次 15.1 15.2 undefined .. JavaScript ECMA-262 Edition 3 以降では undefined 変数が存在 158 Math 関数 . 16.1 16.2 16.3 16.4 ビルトイン Math オプジェクト . Math が持っプロバティとメソッド . Math はコンストラクタ関数ではない . Math オプジェクトは変更・削除不可… レビュー 終わりに … 1 59 … 159 … 159 ... 161 … 161 … 1 63 … 1 67 … 1 69

ー 169 索 引 字 数 号 … 28 , 116 constructor . … 42 , 112 ... 19 … 24 , 155 .. 142 .. 142 ー proto_ Date() . decodeURI() . decodeURIComponent ( ) . delete ( 演算子 ) .. DOM … DontDelete 属性 .. 爲 -8 一 1 ・ -8 11 16 進数… 8 進数… apply() . ... 63 , 70 90 arguments.. ... 63 , 66 arguments. callee.. arguments. length.. ... 68 Array() ... 8 , 36 , 43 , 107 , 112 , 125 ~ 128 , 130 , 163 , 164 Array. prototype. concat() . ... 127 Array. prototype.join() . ... 43 , 107 , 108 , 127 Array. prototype ・ pop() . .. 128 Array. prototype. push() . ... 128 Array. prototype. reverse() .. … 128 Array. prototype. shift() . ... 128 Array. prototype. slice ( ) .. … 128 Array. prototype. sort() .. … 128 Array. prototype. splice() .. ... 128 Array. prototype. toLocaleString().. ... 127 Array. prototype. t0String ( ) .. … 127 Array. prototype. unshift() .. … 128 ... 67 enc0deURI ( ) . encodeURIComponent ( ) . eval() .. eval スコープ .. -8 一 9 、戸 0 LO for-in... Function. prototype. apply().. Function. prototype. call() .. Function. prototype. toString() .. function 文… ... 46 … 63 , 70 , 90 … 63 … 64 ... 70 , 75 hasOwnProperty() . ... 57 BooIean().. Boolean. prototype. toString ( ) . B001ean. prototype. value()f() .. … 10 , 147 ~ 149 , 163 , 164 … 149 … 149 ⅲ ( 演算子 ) .. instanceof ( 演算子 ) .. isFinite ( ) . isNaN ( ) .. isPrototypeOf() .. 一 0 -0 一ワ 3 9 、つ / -4 つけ LO 「 / に 0 call() ..

170 ー 索引 0 Object() … 3 , 4 , 33 , 35 , 36 , 55 ~ 58 , , 111 , 163 , 1 ()bject. prototype. has()wnPropertY ( ) . ()bject. prototype. isProt0typeOf() .. ()bject. prototype. propertYIsEnumerable ( ) . ()bject. prototype. t0LocaleString().. Object. prototype. t0String ( ) .. ()bject. prototype. value()f().. … 43 , 107 , 108 , 127 join() . … 159 , 161 … 160 … 160 … 160 … 18 .. 160 . 160 ... 159 ... 160 … 160 … 159 … 159 … 160 … 159 ... 159 .. 160 … 160 ... 160 … 161 … 161 ... 161 … 161 … 161 … 160 … 160 … 161 Math .. Math. abs() .. Math. acos() .. Math. asin() . Math. atan ( ) . Math. atan2() .. Math. ceil() . Math. cos() .. Math. E … Math. exp() .. Math. floor() . Math. LNIO... Math. LN2 … Math.log() .. Math. LOGIOE .. Math. LOG2E .. Math. max ( ) .. Math. min() .. Math. PI … Math. pow() . Math. random() . Math. round() .. Math. sin() . Math. sqrt() . Math. SQRT1_2... Math. SQRT2 … Math. tan() .. … 58 ... 79 parseFloat() .. parselnt() . … 69 return 文 ... … 4 , 10 , 12 , 27 , 135 ~ 137 , 163 , 1 String() .. String.fromCharCode ( ) . ... 137 String. prototype. charAt ( ) .. … 138 String.prot0type. charC0deAt ( ) .. ... 138 String. prototype. concat() . ... 138 String. prototype. index()f() .. … 138 String. prototype.lastlndex()f().. ... 138 String. prot0type.localeCompare ( ) .. … 138 String. prototype. match() .. ... 138 String. prototype. replace ( ) . … 138 String. prototype. search ( ) . ... 139 String. prototype. slice ( ) .. … 139 String. prototype. split() . ... 139 String. prototype. substr() .. … 139 String.prot0type. substring ( ) . … 139 String. prototype. t0LocaleLowerCase ( ) .. ... 139 String. prototype. t0LocaleUpperCase ( ) .. … 139 String. prototype. t0LowerCase ( ) . ... 139 String.prot0type. t0String ( ) .. … 139 String.prot0type. t0UpperCase ( ) . … 139 String. prototype. value()f() . … 140 ... 11 , 12 , 14 , 62 , 92 , 163 ... 17 , 155 , 163 ... 10 , 141 , 142 , 144 , 163 , 164 ... 144 ... 144 … 144 … 144 … 144 .. 144 ... 145 … 145 ... 145 … 145 ... 145 new ( 演算子 ).. null.. Number() . Number. MAX_. _VALUE … Number. MIN VALUE .. Number. NaN . Number. NEGATIVE INFINIIY. Number. POSITIVE INFINI"IY . Number. prototype. t0Exponential() . Number. prototype. t0Fixed ( ) .. Number. prototype. toLocaleString ( ) .. Number. prototype. toPrecision ( ) . Number. prototype. t0String ( ) . Number. prototype. value()f().. … 66 , 85 , 86 , 88 , 89 , 91 , 164 this .. typeof ( 演算子 ) .. … 25 IJ … 17 , 41 , 80 , 157 , 158 , 163 undefined .. Underscore.js ..

ー 1 71 索引 た行 第一級関数 ... 多次元配列… ツリー構造… 等値演算子 ( ー ) .. 同値演算子 ( = = = ) .. ドット記法… var ( 演算子 ) .. ... 81 … 36 , 131 ... 36 .. 19 .. 19 , 155 … 38 ... 10 , 47 , 77 、 Mindow . あ行 な行 インスタンス化 .. インスタンス .. オプジェクトリテラル .. … 9 , 15 , 118 ... 7 , 12 , 93 … 58 名前付き関数式… ネイテイブオプジェクト .. … 70 … 7 , 9 , 27 , 47 は行 か行 配列 ... 複合型 .. プラケット記法 .. プリミテイプ値・プリミテイプ型 .. プロックスコープ .. プロトタイプチェーン .. プロトタイプ継承… ホストオプジェクト… 型変換… .. 142 関数… ... 74 関数コンストラクタ .. … 70 関数宣言… … 70 関数式… … 70 関数スコープ… ... 95 関数の即時実行… … 72 , 73 クロージャ .. ... 106 , 101 グローバルオプジェクト .. ... 77 グローバル関数 . … 78 グローノヾルスコープ .. … 95 グローノヾルプロノヾティ . ... 79 グローパル変数 . … 79 継承… ... 7 , 60 , 107 , 117 , 119 , 121 高階関数 .. … 74 コンストラクタ・コンストラクタ関数 … 7 , 10 , 12 , 28 , 30 , 91 , 112 さ行 … 36 , 125 … 22 ... 38 … 15 , 151 ... 96 … 107 , 41 … 7 , 108 … 47 ま行 マスキング… ミュータブルオプジェクト ( 可変オプジェクト ) 無名関数… メソッド . … 99 ... 27 ... 72 , 73 や行 五ロ 一三ロ 約 予 ... 40 , 59 ン ~ ププ ~ コ ~ 型値一一値ス 帰照数値ココ数的 再参小数スス整静 … 75 ... 25 … 142 ... 142 … 95 … 98 … 142 … 98 ら行 ラッパーオプジェクト .. リテラル . 列挙可能 .. ローカルスコープ .. ... 3 , 15 , 21 , 151 … 14 , 61 ... 47 , 58 … 95

奥付

開眼 / JavaScript 言語仕様から学ぶ JavaScript の本質 2013 年 6 月 18 日 2013 年 11 月 26 日 著 訳 発行 者 者 人 印刷・製本 発 発 行 所 兀 初版第 1 刷発行 初版第 2 刷発行 CodyLindley ( コディ・リンドレー ) 和田祐一郎 ( わだゆういちろう ) テイム・オライリー 株式会社平河工業社 株式会社オライリー シャノヾン Fax ( 03 ) 3233-3440 TeI ( 03 ) 3233-0641 ( 代表 ) 〒 101-8460 東京都千代田区神田錦町 3-1 株式会社オーム社 電子メール j 叩an@oreilly.co.jp Fax ( 03 ) 335 5263 Tel ( 03 ) 335 5227 〒 16 0002 東京都新宿区坂町 26 番地 27 インテリジェントプラザビル IF printed ⅲ Japan ( ISBN97 & 4-87311-621-1 ) 乱丁、落丁の際はお取り替えいたします。 います。 パンから文書による許諾を得ずに、いかなる方法においても無断で複写、複製することは禁じられて 本書は著作権上の保護を受けています。本書の一部あるいは全部について、株式会社オライリー・ジャ