2010年4月26日 星期一

弄出 JavaScript 中 print 的替代品

2010-04-27 更新

經 ericskScott 提醒, 我才發覺有 console.log() 這樣的好東西。Firebug 和 Chrome JavaScript Console  都支援。console.log(someObject) 後將該物件變成清單, 可以點選展開細項。原文就當初玩 prototype 的記念物吧。

原文

初用 JavaScript 時, 覺得這語言很難搞, 沒有 print 我要怎麼除錯? 轉念想想, 沒有 terminal 在瀏覽器裡是要 print 給誰看。對不起 JavaScript, 我錯怪你了。

學一陣子 JavaScript 後, 發覺大家似乎用 alert() 或寫到網頁裡某個區塊來做出 print 的效果 (用 jQuery 的話, 就是 $('#myPrintArea').html(...) )。但被 ipython 養壞胃口的我, 希望能在 interactive console 下有類似 print 的功能。這樣方便一邊試一邊看結果。

直到看到 JSON.stringify, 才找到頗理想的解法。JSON.stringify(someObject) 會將 someObject 轉成字串, 這樣就能看到 someObject 的內容啦。最近常在 Chrome JavaScript Console 裡這麼用 , 效果頗不錯的。不知大家都用什麼方法做到 print 的效果呢?

附帶一提, 若懷念 Python 的 repr(), 可以利用 prototype 填入:
Object.prototype.repr = function() {
    return JSON.stringify(this);
};

於是就能用 someObject.repr() 達到類似 Python 中 repr(someObject) 的效果了。目前不熟 prototype, 不知這樣搞有啥副作用。 JavaScript 還滿有趣的, 今年學 Common Lisp 沒成, 改成來練 JavaScript 吧。明年再來碰 Scala, 而一直沒學好的 Haskell 和 Common Lisp, 之後有緣再說吧。

3 則留言:

  1. You do know about "console.log()"?

    回覆刪除
  2. No, I don't. No wonder no body complains about this. Thanks for pointing out this obvious tip.

    回覆刪除
  3. SpiderMonkey 的 shell 有 print() 函式

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...