Supertrue walfo

JavaScript, 悪いパーツについてのおさらい

書籍『JavaScript The Good Pars』からの引用。JavaScript に組み込まれた悪いパーツに気をつけよう。

悪いパーツ

『JavaScript The Good Parts』 から悪いパーツについて引用。

  • == “これは邪悪な演算子”、オペランド3つの善良な演算子を使いましょう。 (ただし意図してこれを使うときもある)
  • with 文 “これを使った結果は予測できないことも多い。”
  • eval 文字列をコンパイルして実行する。渡された小さな文を実行するためだけにコンパイラを実行するので、実行速度は非常に遅い。 setTimeout setInterval new Function も同様に、文字列で処理を渡す場合は注意が必要。(関数を渡す場合は別)
  • continue 文 “continue文を使わないようリファクタリングを行うことで、改良されなかったコードを見たことがない。”
  • switch 文での処理の継続 タイプミスなのかどうか、判断しにくくなります。
switch (type)
  case a:
  case b:
   func1(); // a と b は同じ処理
   break;
  case c:
   func2();
   break;
  default: break;
  • ブロックなしの文 “見た目に行いそうな処理と実際に行う処理が異なるプログラムは、正しい動作をさせることが困難になる。”
// bad
if (ok)
  t = true
  advance();

// good
if (ok) {
  t = true;
  advance();
}
  • ++ — “この演算子は、無謀なプログラムを書かせる原因にもなってしまう。” “++と–を使うと、コードが詰まりすぎ、トリッキーなものになりすぎ、そして不可解になりすぎる傾向がある。”
for (p = src, q = dest; *p; p++, q++) *q = *p;
  • ビット演算子 “多くの言語においては、ビット演算子はハードウェアの処理法に近く、そのため高速に動作する。しかしJavaScriptでは、ハードウェアの処理法からは程遠く、とても遅い。”
  • function 文と function 式の比較
  • 変数型のラッパーオブジェクト リテラルで書きましょう。
// bad
new Boolean(false);
  • new new 呼び出しを前提として組まれたオブジェクトに new を付け忘れて呼び出すと this はグローバルオブジェクトとなってしまう。
  • void “多くの言語では, void は値を持たないことを意味するが、 JavaScript では undefined を返す演算子となっている。”

まとめ

知識が増えると選択肢も増え、ノイズな選択肢も増えます。 とはいえ基本についてはいつも変わらないので、忘れないようにしないとと思いましたとさ。

リンク

2015年6月15日 15:14
2015年6月23日 16:49 編集済み