むずかしいことはわかりません

いろいろ書いてるみたいな

パーフェクト Javascript を読み始めた。 - 2

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

誤植的な部分とかがでてきたので、まとめておこうと思ったら、
既にやってる人もいたのでメモ

http://d.hatena.ne.jp/phithon/20120106/perfect_javascript_review_and_errata

あと、気になったところ
P104の図の注釈
js> var n = false || 'x'; // 評価結果は左オペランドの文字列値

js> var n = false || 'x'; // 評価結果は右オペランドの文字列値


というわけで、今日は4-37 論理演算子まで読んだところのまとめ

  • if-elseの記述ではわかりやすくするために{}を使う
    • 最初のifの真ブロックでifを使って、その中にelseがあると誤動作することもある
    • 引用しようと思ったけど、このテンプレートだと見づらかった
  • switch-caseで使われる比較は常に"==="(型変換なし比較)
  • for each in は、ECMAScriptの仕様にはない Javascript独自実装
  • for ( 変数 in オブジェクト式 )
    • オブジェクトのプロパティ名を列挙する
    • 値へのアクセス、表示などには[](ブラケット)を使う→for ( key in Object ) { var a = Object[key]; } みたいなかんじ
    • 列挙の順番は保証されない
    • 列挙されない属性がある→Arrayのlengthなど
    • プロトタイプ継承したプロパティも列挙される
  • for each in は、指定した変数に対してプロパティ値を代入する。
    • forではキー、for eachでは値。混乱しそう!
  • ラベル: 文
    • このブロック内にbreakを書くことで、ラベル内の処理から脱出できる
    • Cのラベルは「その場所へ飛ぶ」こちらのラベルは「そのブロックに名前をつけてひとかたまりにする」
  • 例外処理
    • catchは1つしか書けない。すべての例外をここでcatchする
    • finallyは常に実行される。すべての例外と例外がないときでも実行される。
    • 上のクラスで伝播するには、catch内で再度throwするか、そもそもcatchを書かない。
  • debuggerコマンド
    • debuggerで止まることを期待するってことは、break point?それとも処理が止まる?
  • 数値は浮動小数点で計算されるので、1/2が0.5になる
    • 他の言語だとinteger扱いになっている変数では1/2は0になる。
    • 勘違いしやすそう
  • Strict EqualsとEquals
    • ===はStrict Equals。厳密な比較
    • ==はEquals
  • x>yとx<=yがどちらも真、どちらも偽になることがある
    • 数学的にはそんなことは起こらない
    • 型変換が起こる可能性があるので、数学的な比較以外は結果は不定
  • 代入時に遅延評価が行える
    • 変数、数値以外に式も書けるので三項演算子のようにも使える