くれよん、 はじめました。

さすがに、主力言語がサーバーサイドJavaScriptになる中で、自分の手につくライブラリがないとつらい。かといってjQueryのお手軽さ、ActionViewのお手軽さを体感した身では、新しくJavaScriptフレームワークを探すのも微妙だなぁ、ということで、作り始めました。

ひとまず、jQuery.core のよく使う必要な部分をもってきて、さらにh()とかその辺を追加しまくる。しまくる、といっても必要になったらこっちに追加して全プロジェクト(CouchApp10個ぐらい抱えているので)でupdateをする、という方向で。

落書きするように気軽にCouchAppをかけたらいいなぁ、という意味でクレヨンってしてみました。

サーバーサイドでのArrayの判断。

jQuery.core のソースをみていて気がついたのですが、Object.toString.call(obj) == "[object Array]" するのが正しい判定方法のようです。ひさびさに以下動かしてみました。ドキュメントにあるArrayとJS内で作ったArrayの違い。

function(doc) {
  var a = [1,2,3];
  emit("[doc.array, a] - 01. value", [doc.array, a]);
  emit("[doc.array, a] - 02. instanceof", 
       [doc.array instanceof Array,
        a instanceof Array]);
  emit("[doc.array, a] - 03. constructor.name",
       [doc.array.constructor.name,
        a.constructor.name]);
  emit("[doc.array, a] - 04. typeof", 
       [typeof(doc.array), typeof(a)]);
  emit("[doc.array, a] - 05. toString.call ", 
       [toString.call(doc.array),
        toString.call(a)]);

結果はこうです

{"total_rows":5,"offset":0,"rows":[
{"id":"...","key":"[doc.array, a] - 01. value","value":[[1,2,3],[1,2,3]]},
{"id":"...","key":"[doc.array, a] - 02. instanceof","value":[false,true]},
{"id":"...","key":"[doc.array, a] - 03. constructor.name","value":["Array","Array"]},
{"id":"...","key":"[doc.array, a] - 04. typeof","value":["object","object"]},
{"id":"...","key":"[doc.array, a] - 05. toString.call ","value":["[object Array]","[object Array]"]}
]}

02. を見て分かるとおり、いまだにinstanceofが使えませんが。まぁtoString.callでいいのかな。