toSourceってこんなに便利だったのね(2)

先のエントリtoSourceってこんなに便利だったのね - ヒルズで働く@robarioの技ログの絡みで、id:higeorangeさんがOpera用のtoSourceを作ってくださいました。Opera用とありますが、そのままIEでも動きましたので早速使わせていただいております。感謝感謝。

ところでFirefoxのtoSourceでは

{'a':{'b':'hoge','c':33}}.toSource();

({a:{b:"hoge", c:33}})

になるのですが、higeorangeさんのtoSでは

({a:({b:"hoge", c:33})})

入れ子になった連想配列に余分なカッコが付いてしまうので、適当にパッチを当てました。

--- toSource.js.orig      2006-10-12 20:28:50.643948800 +0900
+++ toSource.js   2006-10-12 20:28:32.678115200 +0900
@@ -24,25 +24,29 @@
         }
         return res;
     } else if(con == Object) {
-        var res = '({';
+        var res = '{';
         var i=0;
         for(var j in this) {
             if(j != 'toS') {
                 if(i == 0) {
-                    res += j + ':' + this[j].toS();
+                    res += j + ':' + this[j].toS(1);
                 } else {
-                    res += ', ' + j + ':' + this[j].toS();
+                    res += ', ' + j + ':' + this[j].toS(1);
                 }
                 i++;
             }
         }
-        res += '})';
-        return res;
+        res += '}';
+        if (arguments.length) {
+            return res;
+        } else {
+            return '('+res+')';
+        }
     }
 }

これで出力が

({a:{b:"hoge", c:33}})

となってFirefoxのtoSourceと(多分)同じになりました。