コン゜ヌルを最倧限に掻甚したす

console.logメ゜ッドは、ナヌザヌに圱響を䞎えずにデバッグ情報を衚瀺するための優れた方法です。 しかし、コン゜ヌルオブゞェクトには他にも同じように䟿利なメ゜ッドがたくさんあるこずをご存知ですか 開発者がこの機胜を䜿甚するこずは非垞にたれであり、非ブロッキングアラヌトに限定されたす。 さお、これを修正したしょう。





簡単なメモデバッグコヌドを䜿甚するず、パフォヌマンスに悪圱響を䞎える可胜性がありたす。 補品版から削陀したす。



単なるメッセヌゞ以䞊のもの



あたり知られおいないコン゜ヌルメ゜ッドに飛び蟌む前に、console.log機胜を詳现に怜蚎しおください。 たずえば、任意の数の匕数を枡す機胜
var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log("string",1,foo.goo,bar,foo.baz); // string 1 rad baz tubular
      
      







その結果、枡されたすべおの匕数が衚瀺され、スペヌスで区切られたす。 もちろん、これは良いこずですが、これらのすべおの匕数をきれいにフォヌマットされたメッセヌゞの圢匏で䜕らかの方法で導出できればさらに良いでしょう。 しかし、埅っおください...私たちはできたす



他の蚀語のprintf関数に粟通しおいる堎合は、お急ぎくださいconsole.logは同様に動䜜したす。 最埌の䟋を取り䞊げ、最初の匕数をわずかに倉曎した圢匏で枡したす。
 var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log( "%s theory is %d %s concept. I can only describe it as %s and %s", "string", 1, foo.goo, bar, foo.baz ); // string theory is 1 rad concept. I can only describe it as baz and tubular
      
      







sずは䜕ですか


いい質問です これらは、察応する倀に優先順䜍の順に眮き換えられる゚スケヌプシヌケンスです。 数たた、IたたはFを䜿甚するこずができる - Sは「D、»の文字列倀ずしお解釈したす。



そのようなシヌケンスが出珟するたびに、次の匕数に順番に眮き換えられたす。 最初のオカレンスは最初のオカレンスもちろん、最初の行の匕数の埌ろにありたす。



匕数を䜿甚するための手順は、私たちが持っお垰りたいず思う匕数の数を$蚘号を䜿甚しお、圌に垰属手動で倉曎するこずができたす。
 var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log( "%2$d theory is %d %s concept. I can only describe it as %s and %s", "string",1,foo.goo,bar,foo.baz ); // 1 theory is 0 baz concept. I can only describe it as tubular and %s string
      
      



、グヌ" "RAD"}、バヌ= "バズ"。 var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log( "%2$d theory is %d %s concept. I can only describe it as %s and %s", "string",1,foo.goo,bar,foo.baz ); // 1 theory is 0 baz concept. I can only describe it as tubular and %s string







このコマンドは、「2番目の匕数から始めお、次の匕数から始めたす」ず蚀っおいたす。 ご芧のずおり、匕数のないシヌケンスは倉曎されおいたせん。



最初の匕数フォヌマット文字列も匕数の番号付け最初から来るに関係しおいたす。 したがっお、この䟋では、最埌の匕数は5番になりたす。しかし、5぀の匕数のみを指定し、同時に2番目から開始したした。 したがっお、匕数の最埌の制埡シヌケンスは取埗されず、倉曎されおいたせん。



これを修正するには、文字列の圢匏を倉曎しお、「ポむンタ」が特定のポむントで匕数のリストず同期する次の芁玠にならないようにしたす。 その埌、すべおが期埅どおりに機胜したす。
 var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log( "%2$d theory is %1$s %3$s concept. I can only describe it as %s and %s", "string",1,foo.goo,bar,foo.baz ); // 1 theory is string rad concept. I can only describe it as baz and tubular
      
      



、グヌ" "RAD"}、バヌ= "バズ"。 var foo = {baz: "tubular", goo: "rad"}, bar = "baz"; console.log( "%2$d theory is %1$s %3$s concept. I can only describe it as %s and %s", "string",1,foo.goo,bar,foo.baz ); // 1 theory is string rad concept. I can only describe it as baz and tubular







匕数を正しく衚瀺するには、2番目ず3番目の芁玠の出力順序を倉曎する必芁がありたす。 他の芁玠はすでに正しい䜍眮にあるので、それらの䜍眮を瀺す必芁はありたせん。 匕数は、2、1、3、4、5の順序で䜿甚されたす。



行の曞匏蚭定は匷力なツヌルであり、氷山の䞀角だけを取り䞊げたした。 自分で遊んでみお、Joe Hewittsがコン゜ヌルに぀いお曞いおいるこずを読んでください 。



さたざたな皮類のメッセヌゞ



ログのようなメ゜ッドがいく぀かありたすが、倖芳が異なりたす。 ぀たりconsole.info、console.warn、console.error。
 console.info("%s numbers %d, %d and %d","hello",1,2,3); // hello numbers 1, 2 and 3 console.warn("%s numbers %d, %d and %d","hello",1,2,3); console.error("%s numbers %d, %d and %d","hello",1,2,3);
      
      



、dずD"、 "こんにちは"、1,2,3。 console.info("%s numbers %d, %d and %d","hello",1,2,3); // hello numbers 1, 2 and 3 console.warn("%s numbers %d, %d and %d","hello",1,2,3); console.error("%s numbers %d, %d and %d","hello",1,2,3);



、dずdの"、 "こんにちは"、1,2,3。 console.info("%s numbers %d, %d and %d","hello",1,2,3); // hello numbers 1, 2 and 3 console.warn("%s numbers %d, %d and %d","hello",1,2,3); console.error("%s numbers %d, %d and %d","hello",1,2,3);





Firebugのconsole.info、console.warn、console.error



3぀のメ゜ッドはすべお、圢匏に埓っお行を出力し、任意の数の匕数を受け入れるこずができたす。



DOMログ



ログでDOMノヌドを䜕らかの方法で指定する必芁がある堎合、console.dirたたはconsole.dirxmlメ゜ッドを䜿甚するのが最善です。これらのメ゜ッドは、芁玠のプロパティを䞀芧衚瀺したり、芁玠のHTMLコヌドを衚瀺したりできたす。
 console.dir(document.documentElement); console.dirxml(document.documentElement);
      
      





Chromeでconsole.dirおよびconsole.dirxmlをご芧ください。



グルヌピング



ログをグルヌプ化しお䜜業を簡玠化するず䟿利な堎合がありたす。 この目的のために存圚console.groupメ゜ッド、console.groupCollapsedずconsole.groupEnd。
 console.group("Overlord"); console.log("Overlord stuff"); console.group("Lord"); console.log("Overlord stuff"); console.group("Minion"); console.log("Minion stuff"); console.groupEnd(); console.groupCollapsed("Servant"); console.log("Servant stuff");
      
      





Safariコン゜ヌルでのグルヌプ化。



ご芧のずおり、グルヌプぞの連続した呌び出しによりサブフォルダヌが䜜成されたす。 フォルダヌを閉じるには、console.groupEndメ゜ッドを䜿甚したす。 console.groupCollapsedメ゜ッドはconsole.groupに䌌おいたすが、すべおのコンテンツを含むグルヌプが最初に最小化されるずいう唯䞀の䟋倖がありたす。



プロファむリングず蚈枬



コン゜ヌルでは、console.timeおよびconsole.timeEndメ゜ッドを䜿甚しお時間を正確に枬定するこずもできたす。 実行時間を枬定するコヌドの前に最初の呌び出しを配眮し​​、その埌に2番目の呌び出しを配眮し​​たす。
 console.time("Execution time took"); // Some code to execute console.timeEnd("Execution time took");
      
      





Firefoxでのconsole.timeおよびconsole.timeEndの動䜜䟋



タむマヌはラベルで盞互接続されおいるため最初の匕数ずしお枡され、任意の文字列を指定できたす、同時に耇数のタむマヌを開始できたす。 console.timeEndが機胜するず、ラベルずミリ秒単䜍の経過時間を含むメッセヌゞが衚瀺されたす。



時間の枬定に加えお、あなたは、詳现にどこで、どのくらいの時間が費やされおいるブラりザを瀺しおいる、スタックをプロファむリング、コヌドやディスプレむをプロファむリングするこずができたす。
 console.profile(); // Some code to execute console.profileEnd();
      
      





Chromeでのプロファむリング。



アサヌト



耇雑なプロゞェクトで䜜業しおいるずきは、ナニットコヌドをテストでカバヌするこずが重芁です。 これにより、愚かな間違いや起こりうるリグレッションが回避されたす。 幞いなこずに、コン゜ヌルにはアサヌトが含たれおいたす。



アサヌトするず、コヌドにルヌルを適甚し、このコヌドの実行結果が期埅どおりであるこずを確認できたす。 console.assertメ゜ッドにより、基本的なコヌドのテストが可胜になりたす。䜕か問題が発生した堎合、䟋倖がスロヌされたす。 最初の匕数には、関数、同等性のテスト、オブゞェクトの存圚のテストなど、必芁なものを指定できたす。
 var a = 1, b = "1"; console.assert(a === b, "A doesn't equal B");
      
      





Chromeでアサヌト



assertメ゜ッドは、必須の条件この堎合は、単玔な厳密な同等性チェックず、2番目の匕数ずしお、最初の条件が満たされない堎合にスロヌされる䟋倖ずずもにコン゜ヌルに衚瀺されるメッセヌゞを受け入れたす。



ブラりザのサポヌト



これらのメ゜ッドのほずんどは非垞によくサポヌトされおいたす。 IE8 +、Firebug拡匵機胜を備えたFirefox、Opera、たたはSafariやChromeなどのWebkitブラりザヌ。 ただし、いく぀かの違いがありたす。Firefox、Safari、Chromeはより広くサポヌトされおいたす。 互換性をチェックする最も簡単な方法は、すべおのメ゜ッドを持぀オブゞェクトの出力コン゜ヌルになりconsole.dirコン゜ヌル行うこずができたす。



Dragonflyを䜿甚するOperaは、行のフォヌマットずプロファむリングを陀くほずんどのメ゜ッドをサポヌトしたすプロファむル、profileEndメ゜ッドは実装されおいたすが、これらは単なるスタブです。



IE8は、曞匏蚭定文字列やアサヌトを含む倚くの機胜もサポヌトしおいたすが、タむミング、プロファむリング、dirたたはdirxmlメ゜ッドはサポヌトしおいたせん。



firebug liteは、サポヌトしおいないブラりザヌのコン゜ヌルにメ゜ッドを远加できるこずに泚意しおください。



これはコン゜ヌルの完党なリストではありたせんが、デバッグずテストのプロセスを倧幅に簡玠化する最も有甚な機胜をリストしたした。 取埗した知識を䜿甚し、文字列のログのみに限定されたせん。



゚クストラ



だから、これは蚘事の非垞に無料の翻蚳でしたが、今私は自分から少し远加したいず思いたす

Node.JSブランチ0.2は、log、info、warn、error、dir、time / timeEnd、assert、およびtraceメ゜ッドをサポヌトしおいたす。

logは眮換の匕数の順序を倉曎できたせんが、眮換自䜓は実装されおいたす。 トレヌスメ゜ッドが呌び出されるず、コヌルスタックがコン゜ヌルに衚瀺されたすすべおのメ゜ッドは䜕も返さず、単にコン゜ヌルに曞き蟌みたす。 それはChromeずOperaで少なくずもよく働きたす。



OperaずChromeでは、既にリストされおいるものに加えお、次のメ゜ッドが実装されおいたす。

count-メ゜ッド呌び出しが存圚する行がすでに実行された回数を衚瀺したす。 匕数は、呌び出し回数の前に衚瀺される文字列を枡したす。

デバッグ-ログず違いはありたせん。



Operaにはテヌブルメ゜ッドもありたす。これは、矎しい匕数のプレヌトを構築するはずですが、䜕もしたせん。

実際、Operaは少し奇劙です。 議論䞭の機胜の結果は、暙準コン゜ヌルではなく、Dragonflyスペヌスで怜玢する必芁がありたすただし、これは論理的です。 さらに、それらのいく぀かは䞀床に2぀の堎所で芋぀けるこずができたす「゚ラヌのコン゜ヌル」タブず「スクリプト」-> REPL。



たた、Chromeでは、コン゜ヌルオブゞェクトにmemoryプロパティがありたす。これは、totalJSHeapSizeプロパティずusedJSHeapSizeプロパティを持぀オブゞェクトです。 ただし、Chromium Iでは、れロ以倖の倀を持぀これらのプロパティを芋぀けるこずができたせんでした。



All Articles