The Good Parts 「良いパーツ」によるベストプラクティス 2章

読んだ。
覚えるために、まとめてみる

2章 文法

2.1 ホワイトスペース
/* */ は使わないほうがいい
    正規表現リテラル内に出てくる可能性があるから
2.2 名前
アルファベット、数字、アンダースコアで構成される

予約語は名前に使えない
    e.g. boolean, if, return, ....

予約語であるはずの文字列が予約語になっていない
    e.g. undefined, NaN, ...

予約語は以下のものに使えない
    変数名
    パラメータ名
    オブジェクトのプロパティ
    オブジェクトのリテラル
2.3 数値
数値型は1つしかない
    内部的に64bitの浮動小数

NaN
    通常の値を生成できない場合に得られる
    NaNは、NaNを含めたどんな数ともイコールにならない
    isNan関数を利用し、NaNかどうかの判定を行う

Infinity
    1.79769313486231570e+308 より大きい数

数値はメソッドを持つ

数値処理を行う、Mathオブジェクトが用意されている
2.4 文字列
文字列リテラルは、0個以上の文字をシングルクォートまたは、ダブルクォートで囲むことで表現する

バックスラッシュはエスケープ文字

すべての文字は16bit長
    Unicodeが16bit文字集合だったときの名残

1文字の文字を扱う場合でも文字列として扱う

エスケープシーケンスを使うことで、バックスラッシュやシングルクォートなどを文字列にいれることが出来る。

\u
    コードポイントの数値で文字を指定
    e.g. 'A' === '\u0041'

文字列はlengthプロパティを持つ
    e.g. "hoge".length === 4


文字列はイミュータブル
    作成後にその状態を変えることができない

 +演算子で文字列を連結できる

文字列ではメソッドが利用できる
    e.g. 'cat'.toUpperCase() === 'CAT'
2.5 命令文
JavaScriptは、すべてのコンパイルユニットを1つの名前空間に投げ込む

関数内で使われたvar文は、その関数のプライベート変数を定義する

switch、while、for、do 文は、ラベルを命令文の前に付けることが出来る
    break文で、ラベルを指定可能

    e.g. 
    hoge:
        for ( i = 0; i < 10; ++i ) {
            if ( i == 10 ) {
                break hoge;
            }
        }


JavaScriptのブロックは、新しいスコープを生成しない
    変数は、関数の先頭で定義すべき

条件式で偽と評価される値
    false
    null
    undefined
    空文字列 ''
    数値 0
    数値 NaN

条件式で真と評価される値は、偽と評価される値以外のすべての値

switch文のcase節は、定数である必要はない

for in は、指定したオブジェクトのプロパティ名を列挙する
    object.hasOwnProperty() メソッドを使用して、プロパティが本当にそのオブジェクトのメンバかチェックする必要があることが多い

try文
    try文は、ブロック部分を実行しその中で投げられた例外をキャッチする
    catch節では、例外オブジェクトを受け取るために新しい変数を定義する

throw文
    name と message の2つのプロパティを含むオブジェクトリテラルを生成させる

return文
    式が指定されていない場合、戻り値はundefined
    JavaScriptでは、return と 式 の間に改行を入れることは出来ない

break文
    loop文とswitch文から抜け出す作用を持つ
    ラベルを指定すると、そのラベルが付いた文から抜け出す
    JavaScriptでは、break文とラベルの間に改行を入れることは出来ない
2.6 式
もっとも単純な式
    リテラル値(文字列や数値)
    変数
    予め用意された値(true, fales, null, undefined, NaN, Infinity)
    (等)

typeofを使うことで以下の値を取得できる
    number, string, boolean, undefined, function, object
    オペランドが配列かnullの場合は、結果はobject

関数オブジェクト名に続けて2つの括弧を書くことで、関数呼び出しを行う
    括弧の中に関数に渡す引数を入れることができる
2.7 リテラル
オブジェクトリテラル
    新しいオブジェクトをていぎするための便利な記法

配列リテラル
    新しい配列を定義する便利な記法
2.8 関数
関数リテラル
    関数オブジェクトを定義する

あとがき

2章読んだ感想としては、結構知らないことが多かった。
そして、これは自分の技術的な語彙力が低いことが原因だと思うが、ちょっと分かりにくかった。
この後の章でもっと深く掘り下げられるようなので、そこできちんと理解しておきたい。


まとめのやり方が間違ってる気がするな。。。
とりあえず一度読んだ後に、まとめながらもう一度読むほうがいい気がした。
あと、はてな記法をもっと上手く使いたい。もうちょっと見やすくしたい。