紳士なブログ

紳士すぎてすみません

javascriptの勉強 その1 -文法-

たまに少しかじったりはちょくちょくしてたけど、
じっくり勉強したことはなかったのでそろそろ時間をとってjavascriptを勉強してみる。


題材はO'REILLYの『Javascript : The Good Parts』。
O'REILLY大好きです。


javascriptの良い部分つまみ食いなので、少し違うところで勉強してから読んだほうがいいという所感。


目次

1章 良いパーツ
2章 文法
3章 オブジェクト
4章 関数
5章 継承
6章 配列
7章 正規表現
8章 メソッド
9章 スタイル
10章 美しい機能たち


文法

  • 名前
    • 予約語の多くは、javascriptの中では使われない
      • undefined, NaN, Infinityなどは本来予約語になるべきなのになっていない
    • 予約語は変数やパラメータの名前として利用することができない
    • オブジェクトのプロパティとしても、オブジェクトリテラルとしても、ドットの後に書くようにしても使うことができない


  • 数値
    • javascriptには数値型が1つしかない
    • 他の言語と異なって、独立した整数型をもたない
      • たとえば、1と1.0はまったく同じ値
    • 数字を単に「数字」として認識すればいいので、数値型のせいで発生するエラーを気にする必要がない
    • 数値はメソッドをもつ
    • Mathオブジェクトが用意されている
      • たとえば、Math.floorメソッドは数値を整数に変換する


  • 文字列
    • 文字列リテラルは、シングルクォート、もしくはダブルクォートで囲むことで表現でき、その中には0コ以上の文字を含むことができる
    • 文字列はlengthプロパティをもつ
      • たとえば、"seven".lengthの値は5
    • 文字列はイミュータブル、すなわち一度生成されたらその内容を変更できない
    • +演算子を使って文字列に他の文字列を連結することはできる
    • 文字列ではメソッドが利用できる


  • 命令文
    • var文が関数内で使われたときは、その関数のプライベート関数を定義するものとなる
    • switch, while, for, do文は、ラベルをオプションとして命令文の前に付けることができる
    • そしてbreak文でそのラベルを指定することができる
    • ブロックは一連の命令文のことで、中括弧で囲まれている
      • ただし、javascriptのブロックは、他の言語と異なり、新しいスコープを生成しない
      • そのため、変数はブロックの中でなく、関数の先頭で定義するべし
    • for文は2種類の書き方をし、複雑なループを実行することができる
    • 1つ目は初期化部分、条件式、増加部分という3つの省略可能な節を利用して制御を行う、昔から知られている書き方
      • まず、初期化。ループ変数の初期化を行う。
      • 次に、条件式が評価される。ループ変数がループを終了する条件を満たしたかどうかを調べる。
        • 条件式が省略された場合、評価結果は常にtruly
        • 評価式がfalsyと評価された場合、ループが終了
      • もしループが終了されなければブロック部分が実行され、そして増加部分が実行されてから、条件式の評価の部分からループがくり返される。
    • もう1つの書き方はfor inと呼ばれ、指定したオブジェクトのプロパティ名を列挙するものである
      • この書き方では、それぞれのくり返しの際にオブジェクトのプロパティ名が1つずつ指定した変数に格納されていく
      • その際には、object.hasOwnProperty(変数名)メソッドを利用して、そのプロパティ名が本当にそのオブジェクトのメンバか、それともプロトタイプチェーン上にあるものなのか、ということをチェックする必要がある場合が多い


for (myvar in obj) {
  if (obj.hasOwnProperty(myvar)){
    ...
  }
}


  • 命令文のつづき
    • try文はブロック部分を実行してその中で投げられたすべての例外をキャッチする
      • catch節では、例外オブジェクトを受け取るために、新しい変数を定義する
    • throw文は例外を発生させる
      • そしてthrow文がtryブロック内に存在した場合は、catch節に処理が移る
      • そうでなければ、その関数の実行は強制的に終了し、呼び出し元でtryが使われている場所のcatch節に処理が移動する
      • throw文における式では通常、nameとmessageの2つのプロパティを含むオブジェクトリテラルを生成させる
        • そうしておくことで、その例外をキャッチした際に何をすべきかを決定するための情報を得ることができる



  • 関数
    • 関数リテラルは、関数オブジェクトを定義する
      • 関数リテラルでは、再帰的に呼び出しを行う際に利用するために、名前をつけることもできる
      • パラメータを列挙して記述できる
      • これらのパラメータは、その関数が呼び出された際に引数として渡されてきた値によって初期化される


お読みいただきありがとうございます。
まだまだ続きますよ。