JavaScript: The Good Parts 第1章〜第10章

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

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

一昨日、東京駅〜新潟駅を新幹線で移動してる合間に読んだときの記録。
知ってることが多かったけど、知らないこともそれなりにあったのでその辺を。
この本の著者ってJSLintの人だったかなあ……?なんかこう、内容が非常に過激というか。


ほんとは一昨日の時点で記事は書いてたんだけど、ブラウザで直接書いてたらChromeが落ちたので再度書きなおし。
Chromeはdev channel版だから文句を言うのもおかしいし。


というわけでVimで記事を書くことにしたのでした。
それにしてもhatena.vim便利すなあ。Vimmerはてなーな人にはおすすめです。

3.8 プロパティの削除

Object.prototype.aaa = 234;
var a = { aaa: 573 };

console.log(a.aaa);  // 573
delete a.aaa         // a.aaaを消す
console.log(a.aaa);  // 234

プロパティの削除にはdelete演算子を使う。
プロパティの削除後、プロトタイプチェーン上に同じ名前のプロパティが存在する場合、そちらが見えるようになる。
……delete演算子を初めて使った。

4.3.2 関数呼び出しパターン

thisとかthatの下りがわからない、けど読み直したらわかった気がする。
でも使いどころがわからない。

4.4 引数

argumentsは本物の配列じゃなく、配列に似たオブジェクトらしい。mjd
lengthは持ってるけど、それ以外の配列のメソッドは持っていないみたい……

4.8 再起

JavaScriptは末尾再起最適化をしてくれないので、最悪の場合リターンスタックを使いきって処理に失敗する可能性がある。

5.2 オブジェクト指定子

これは……ハイパフォーマンスJavaScriptだったかなあ、JavaScriptパターンだったかなあ、どちらかで見た覚えがあるけど、
いざというとき覚えてなさそうなのでメモメモ。

// 引数多いし、順番覚えにくい
a(b, c, d, e, f, g, h);

// オブジェクトで渡せば順番は関係ないし、プロパティ名をちゃんとすれば見やすい
a({
  first: b,
  fifth: f,
  fourth: e,
  sixth: g,
  second: c,
  seventh: h
  third: d,
});

6.5 配列かどうかの判定

function isArray(value) {
  return value &&
    typeof value === 'object' &&              // trueになるのはオブジェクトか配列かnull
    typeof value.length === 'number' &&       // trueになるのは大抵の場合配列のみ
    typeof value.splice === 'function' &&     // 配列の場合は必ずtrue
    !(value.propertyIsEnumerable('length'));  // for-inでlengthが列挙できないのは配列
}

うーむむむ……

7.3.5 正規表現グループ

Perl互換正規表現祭りな感じで普通の拡張正規表現程度しか使わない自分にはちょっと辛い……けどがんばるのです。
"(?:"で始まる非キャプチャグループは、マッチした文字列をキャプチャしないので、"()"で囲まれた部分であるキャプチャグループより少しだけ高速に動作する。
"(?="の肯定先読みと"(?!"の否定先読みは良いパーツじゃないそうな。でも必要なときもあるでしょうに。

8章メソッド - String

String.substring()はパラメータに負の値を指定できないのでString.slice()を使いましょう。substring()は要らない子。らしい。


10章までで気になったのはこれくらいかな……
付録は付録で別の記事で。