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() 函式

    回覆刪除

C++ 能否用 memcpy 複製 class / struct 的資料?

答案是: POD (plain old data) type 可以。POD type 可和 C 互通, CPP Reference POD Type 的介紹: Specifies that the type is POD (Plain Old Data) type. Thi...