読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

パーフェクトJavaScript勉強メモ(4)

前へ | 次へ

4章 文、式、演算子

予約語

識別子

  • p71 変数名や関数名など、何かを指定するための単語
  • 単語の長さの制限はない
  • Unicodeの単語なので、日本語を使うことは可能だが推奨しない
  • p72 大文字小文字は区別する
  • $は、よく使う名前のイディオム。prototype.jsが使い始め、jQueryも同様

リテラル表記

  • 書いたそのままの意味を持つ仕組みのこと
  • p73 /foo/で正規表現リテラル表記で扱うことができる

  • 式文の最後は;を付ける
  • ブロックには;は不要
  • JavaScriptでは改行時に;が省略されていると自動的に補完する。ただし、バグのもとなので省略はしない方がよい

ブロック文

p74 変数宣言文

関数宣言文

式文

  • 式がそのまま文になる文法規則
  • JavaScriptは全ての式が式文になるので、計算結果を代入しないなどの無意味な式もエラーにならない。書き間違え時の警告がないので注意

p75 空文

  • ;のみの文。条件を待つだけのwhile(繰り返し条件);などの;に利用

p76 制御文

  • 条件分岐、繰り返し、ジャンプ(例外処理)がある
  • 上記以外は順次処理

if-else文

  • 条件式は暗黙の型変換などがあるので注意
  • p77 ifとelseの対応を明示するため、ブロック文にすることを推奨
  • p78 ただし、elseに続けてifを書く場合は、else ifと続ける方がイディオム

switch-case文

  • p79 switch()のカッコ内に、任意の型の式が書ける
  • caseの後ろに任意の式が書ける
  • caseは同値演算子(===)で比較

繰り返し文

for (変数 in オブジェク式)
  • p87 オブジェクトのプロパティ名を列挙する
  • for eachとは別物。for eachを持つJavaScriptもあるが、ECMA Scriptの標準ではない
  • p88 オブジェクトが持つプロパティを処理するイディオム。.ではなく、[]でアクセスする
var obj={x:1,y:3,z:2};
for (var k in obj) {
    print(obj[k]);
}
  • p89 配列でfor(in)は動作するが、列挙順が不定、列挙されないプロパティがある、プロトタイプ継承したプロパティも列挙するなどがあるので、推奨されない

p90 break文

continue文

ラベルを使ったジャンプ

  • p92 ネストした繰り返し文からまとめて外に出る時などに利用
outer_loop:
while(true) {
  while(true) {
    break outer_loop;
  }
}
  • 繰り返し文の前にラベルを記載する。breakやcontinueの後ろにラベルを追記すると、ラベルのついた文を抜ける

return文

  • p93 式を省略するとundefined値が返る

例外

  • throw 式;で投げられる。特定の計算でも暗黙で例外を発生
  • try-catch-finally内で利用
  • 例外は全てcatchする

その他

  • p95 with文はECMA Scrpt5のstrictモードで使用禁止になったので非推奨

p95 コメント

式の評価

  • 文の実行をexecute
  • 式の評価をevaluate
  • p97 式の評価順

演算子の優先順序と結合規則

p98 算術演算子

  • p99 0による除算はエラーではなくNaN
  • ++と--は、変数の値を書き換えるので破壊的演算子

p100 文字列連結演算子

  • +と+=。オペランドが文字列でない場合は文字列にして結合

同値演算子

  • ===と==のこと(!==と!=も)

比較演算子

p102 in演算子

p103 instanceof演算子

論理演算子

  • !と&&と||
  • &&と||の評価結果は、評価が不成立の時は左オペランドの評価で、成立時は右オペランドの評価となり、ブーリアンになるとは限らない
  • 遅延評価とは
    • 通常の演算では、左右のオペランドを先に評価してから演算するが、論理演算子は左のオペランドをまず評価する
    • 左を評価して、評価が終了する場合は、右は評価しない
    • &&は、左オペランドがfalse判定したら、左の評価値を、true判定したら右の評価値となる
    • ||は、true条件になった最初の値が評価値となる

p104 ビット演算子

  • &、|、^、<<、>>、>>>、~がある

p105 代入演算子

  • Javascriptでは、if(x=y){}という式は、yのブーリアン値を評価して動作するので誤りとは言えない。ただし、誤表記の可能性があるので、推奨しない

算術代入演算子

  • +=と-=

条件演算子(3項演算子)

  • p106 遅延評価する

typeof演算子

delete演算子

  • プロパティを削除する
  • 成功したり、指定したプロパティがなかった場合はtrueが返る
  • varで宣言したグローバル変数はdeleteできない

void演算子

  • p107 オペランドに何を渡してもundefinedになる
  • 特殊な場合に、戻り値を全て無効にするためのイディオムとして利用する

カンマ演算子

  • p108 for文内の式に複数の式を書きたい場合などに利用

ドット演算子とブラケット演算子

関数呼び出し演算子

演算子と型変換の注意点


前へ | 次へ