私のベストプラクティス – JavaScript

1. キャッシュを無効にする

Firefox:
開発ツールを開く -> 設定を開く (F1) -> "Disable HTTP Cache (when toolbox is open)"

Chrome:
デベロッパーツールを開く -> 設定を開く (F1) -> "Disable cache (while DevTools is open)"

2. JSコンソールを開いたままにする

DevToolsでコンソールタブを開き、そのままにしておきましょう。そうすればステップ1の設定が有効なままになり、ネットワークやJSのエラーにもすぐ気づけます。

うっかり見落としたときのために、JSのエラーをさらにわかりやすく表示してくれる次のプラグインもおすすめです:

3. JavaScript:必読書『You Don't Know JS』

4. セミコロン

// you want to return 5 and have ugly formatting:
return
5

// JavaScript Interpretation:
return;
5;

5. 論理演算子&&と||

式もこのようにつなげられるので、これ以上ないほど短いif文が書けます。いわゆるシンタックスシュガーです:

デフォルト値の指定にもよく使われます:

6. JavaScriptは参照渡し?それとも値渡し?

JavaScriptでは、ここが面白いところです。例:

function changeStuff(a, b, c) {
    a = a * 10;
    b.item = "changed";
    c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

出力は次のとおりです:

10
changed
unchanged

もしobj1がまったく参照でなかったとしたら、obj1.itemを変更しても、関数の外にあるobj1にはまったく影響しないはずです。

逆に引数が本物の参照だったとしたら、すべてが変わるはずです。numは100になり、obj2.itemは「changed」になるでしょう。実際には、numは10のまま、obj2.itemも「unchanged」のままです。

実は、渡された要素は値渡しされています。ただし、値として渡されるもの自体が参照なのです。技術的には、これは共有渡し(call by sharing)と呼ばれます。

実際のところ、これは次のような意味になります。パラメーターそのものを変更しても(numやobj2のように)、関数に渡された元のオブジェクトには影響しません。一方、パラメーターの内部の値を変更すると、その変更は反映されます(obj1のように)。