論理演算子で関数の引数を入れ替える
論理演算子(&& と ||)を応用する - てっく煮ブログについて、まとめに違和感があった。というか、そもそも普通は逆にするよなぁと思ったので。
function add(a, b){ addImpl(b && a, b || a); } function add2(a, b){ addImpl(a || b, a && b); } function addImpl(a, b){ console.log(a,b) } add(1,2); // 1 , 2 add(0); // undefined, 0 add(1); // undefined, 1 add(0,1); // 0 , 1 add2(1,2); // 1 , 2 add2(0); // undefined, 0 add2(1); // 1 , undefined add2(0,1); // 1 , 0
id:nitoyon さんがあげていたサンプル(add)は第1引数だけが指定された場合に第2引数に入れ替えて次の関数に渡す。
対して、add2は第一引数がネガティブと評価される値(undefined,null,0,NaN,'',false)*1を返す場合、第2引数を第1引数と入れ替える。
add2のほうが実用的。ただ、両方ネガティブでも入れ替えるのはちょっと嫌(けど、それは条件のほうがおかしいのだけど)
ちなみに、jQuery 1.2.1を確認したところ、1858 行目で add2 のほうが使われていた。
*1:これで全部だったはず/falseが抜けていたのはちょっと斬新過ぎました。