console.log คืออะไร


คำตอบ:


454

มันไม่ใช่คุณสมบัติ jQuery แต่เป็นคุณสมบัติสำหรับการดีบัก คุณสามารถบันทึกสิ่งที่คอนโซลได้เมื่อมีบางสิ่งเกิดขึ้น ตัวอย่างเช่น

$('#someButton').click(function() {
  console.log('#someButton was clicked');
  // do something
});

จากนั้นคุณจะเห็น#someButton was clickedในแท็บ "คอนโซล" ของ Firebug (หรือคอนโซลของเครื่องมืออื่น - เช่นเครื่องมือตรวจสอบเว็บของ Chrome) เมื่อคุณคลิกปุ่ม

ด้วยเหตุผลบางอย่างวัตถุคอนโซลอาจไม่พร้อมใช้งาน จากนั้นคุณสามารถตรวจสอบว่าเป็น - มีประโยชน์เนื่องจากคุณไม่ต้องลบรหัสการดีบักเมื่อคุณปรับใช้กับการผลิต:

if (window.console && window.console.log) {
  // console is available
}

17
เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Google Chrome ยังมีคอนโซลที่รวมอยู่ด้วย
RobertPitt

8
"สิ่งนี้มีประโยชน์เนื่องจากคุณไม่ต้องลบรหัสการดีบักเมื่อคุณปรับใช้กับการผลิต" <- จะเกิดอะไรขึ้นหากผู้ใช้ปลายทางเปิด Firebug
AbdullahC

6
มันยังมีประโยชน์สำหรับ IE ไม่ให้โยนความผิดพลาดสำหรับคอนโซลไม่ได้ถูกกำหนดไว้
อลัน Whitelaw

4
ดีกว่าการตรวจสอบทุกครั้งหาก console.log พร้อมใช้งานจะดีกว่าที่จะมีดังนี้: if (typeof (console) == 'undefined') {console = {'log': function () {return}}} ใน กรณีเช่นนี้คุณสามารถเขียน console.log ทุกครั้งที่คุณต้องการโดยไม่ตรวจสอบสถานะของมัน!
Enrico Carlesso

12
if (console.log)(หรือแม้กระทั่งif (console && console.log)) จะยังคงมีข้อผิดพลาดหากคอนโซลไม่พร้อมใช้งาน คุณควรใช้window.console(ตามที่windowรับประกันว่ามีอยู่) และตรวจสอบระดับความลึกเพียงครั้งเดียวในครั้งเดียว
Tgr

226

สถานที่ที่คุณสามารถดูคอนโซลได้! เพียงเพื่อให้พวกเขาทั้งหมดในคำตอบเดียว

Firefox

http://getfirebug.com/

(ตอนนี้คุณสามารถใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ในตัว Ctrl + Shift + J ของ Firefox (เครื่องมือ> นักพัฒนาเว็บ> คอนโซลข้อผิดพลาด) แต่ Firebug นั้นดีกว่ามากใช้ Firebug)

Safari และ Chrome

โดยทั่วไปแล้วเหมือนกัน

https://developers.google.com/chrome-developer-tools/docs/overview

https://developer.apple.com/technologies/safari/developer-tools.html

Internet Explorer

อย่าลืมว่าคุณสามารถใช้โหมดความเข้ากันได้เพื่อดีบัก IE7 และ IE8 ใน IE9 หรือ IE10

http://msdn.microsoft.com/en-us/library/ie/gg589507(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/dd565628(v=vs.85).aspx

หากคุณต้องเข้าถึงคอนโซลใน IE6 สำหรับ IE7 ให้ใช้ bookmarklet Firebug Lite

http://getfirebug.com/firebuglite/มองหา bookmarklet ที่เสถียร

http://en.wikipedia.org/wiki/Bookmarklet

อุปรากร

http://www.opera.com/dragonfly/

iOS

ใช้งานได้กับ iPhone, iPod touch และ iPads ทั้งหมด

http://developer.apple.com/library/ios/ipad/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/DebuggingSafarioniPhoneContent/DebuggingSafarioniPhoneContent.html

ขณะนี้ใช้ iOS 6 คุณสามารถดูคอนโซลผ่าน Safari ใน OS X หากคุณเสียบอุปกรณ์ หรือคุณสามารถใช้อีมูเลเตอร์เพียงเปิดหน้าต่างเบราว์เซอร์ Safari แล้วไปที่แท็บ "พัฒนา" คุณจะพบตัวเลือกในการรับตัวตรวจสอบ Safari เพื่อสื่อสารกับอุปกรณ์ของคุณ

Windows Phone, Android

ทั้งสองนี้ไม่มีคอนโซลในตัวและไม่มีความสามารถในการคั่นหน้า ดังนั้นเราใช้ http://jsconsole.com/ประเภท: ฟังและมันจะให้แท็กสคริปต์ของคุณใน HTML ของคุณ จากนั้นคุณสามารถดูคอนโซลภายในเว็บไซต์ jsconsole

iOS และ Android

นอกจากนี้คุณยังสามารถใช้http://html.adobe.com/edge/inspect/เพื่อเข้าถึงเครื่องมือตรวจสอบเว็บและคอนโซลบนอุปกรณ์ใด ๆ โดยใช้ปลั๊กอินเบราว์เซอร์ที่สะดวก


ปัญหาเบราว์เซอร์ที่เก่ากว่า

สุดท้าย IE เวอร์ชันเก่าจะพังถ้าคุณใช้ console.log ในรหัสของคุณและไม่มีเครื่องมือสำหรับนักพัฒนาเปิดขึ้นในเวลาเดียวกัน โชคดีที่มันเป็นเรื่องง่าย ใช้ข้อมูลโค้ดด้านล่างที่ด้านบนของรหัสของคุณ:

 if(!window.console){ window.console = {log: function(){} }; } 

สิ่งนี้จะตรวจสอบว่ามีคอนโซลอยู่หรือไม่และจะตั้งเป็นวัตถุที่มีฟังก์ชั่นว่างlogหรือไม่ หน้าต่างทางนี้พื้นรองเท้าและหน้าต่างพื้นรองเท้าบล็อกไม่เคยมีอย่างแท้จริงundefined.


26
แก้ไขให้ฉันถ้าผิด แต่ฉันคิดว่าไม่จำเป็นต้องใช้ Firebug ใน Firefox เพื่อดูคอนโซลเพียงคลิก Ctrl + Shift + J (เครื่องมือ> นักพัฒนาเว็บ> คอนโซลข้อผิดพลาด)
Dane411

4
@ Dane411 นี่เป็นความจริง แต่ firebug นั้นดีกว่าและใช้บ่อยกว่า
Fresheyeball

3
@Fresheyeball บางคนต้องทำความสะอาดขยะทั้งหมด แต่ฉันคิดว่าในบางจุดน่าสนใจน้อยลงที่จะเก็บเกี่ยวพนักงานเหล่านั้นและทำให้ชุมชนสะอาดจริง ๆ
andlrc

2
ใครก็ตามที่ลงคะแนนคำตอบนี้โปรดแสดงความคิดเห็น downvotes ที่ไม่มีความคิดเห็นไม่มีประโยชน์
Fresheyeball

มี window.dump ก่อน window.console.log ดีกว่าฟังก์ชั่นบันทึกเปล่า
OCTAGRAM

100

คุณสามารถดูข้อความใด ๆ ที่เข้าสู่คอนโซลหากคุณใช้เครื่องมือเช่น Firebug เพื่อตรวจสอบรหัสของคุณ สมมติว่าคุณทำสิ่งนี้:

console.log('Testing console');

เมื่อคุณเข้าถึงคอนโซลใน Firebug (หรือเครื่องมือใดก็ตามที่คุณตัดสินใจใช้เพื่อตรวจสอบรหัสของคุณ) คุณจะเห็นข้อความใด ๆ ที่คุณบอกให้ฟังก์ชั่นบันทึก สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณต้องการดูว่าฟังก์ชั่นกำลังดำเนินการอยู่หรือไม่หรือตัวแปรถูกส่ง / กำหนดอย่างเหมาะสม มันค่อนข้างมีค่าสำหรับการค้นหาว่าเกิดอะไรขึ้นกับรหัสของคุณ


10
อย่าลืมกำหนดไว้ก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดใน IE: stackoverflow.com/a/7585409/318765
mgutt

83

มันจะโพสต์ข้อความบันทึกไปยังคอนโซลจาวาสคริปต์ของเบราว์เซอร์เช่น Firebug หรือเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ (Chrome / Safari) และจะแสดงบรรทัดและไฟล์ที่ถูกเรียกใช้งาน

นอกจากนี้เมื่อคุณส่งออกวัตถุ jQuery มันจะรวมถึงการอ้างอิงถึงองค์ประกอบใน DOM และการคลิกมันจะไปที่นั้นในแท็บองค์ประกอบ / HTML

คุณสามารถใช้วิธีการต่าง ๆ แต่ระวังว่ามันจะทำงานใน Firefox คุณต้องเปิด Firebug มิฉะนั้นหน้าทั้งหมดจะล้มเหลว ไม่ว่าคุณจะบันทึกสิ่งใดเป็นตัวแปรอาร์เรย์วัตถุหรือองค์ประกอบ DOM ก็จะให้รายละเอียดแบบเต็มรวมถึงแบบตัวอย่างสำหรับวัตถุด้วย (น่าสนใจเสมอที่จะมีการกระตุ้น) คุณสามารถรวมเป็นจำนวนมากอาร์กิวเมนต์ได้เท่าที่คุณต้องการและจะมีการแทนที่ด้วยช่องว่าง

console.log(  myvar, "Logged!");
console.info( myvar, "Logged!");
console.warn( myvar, "Logged!");
console.debug(myvar, "Logged!");
console.error(myvar, "Logged!");

สิ่งเหล่านี้แสดงพร้อมกับโลโก้ที่แตกต่างกันสำหรับแต่ละคำสั่ง

คุณยังสามารถใช้ console.profile(profileName);เพื่อเริ่มการทำโปรไฟล์ฟังก์ชั่นสคริปต์ ฯลฯ และจบลงด้วยconsole.profileEnd(profileName);และมันจะแสดงในแท็บโปรไฟล์ใน Chrome (ไม่รู้ด้วย FF)

สำหรับการอ้างอิงที่สมบูรณ์ไปที่http://getfirebug.com/logging และฉันขอแนะนำให้คุณอ่าน(ร่องรอย, กลุ่ม, การทำโปรไฟล์, การตรวจสอบวัตถุ)

หวังว่านี่จะช่วยได้!


1
เป็นเพราะเหตุใดconsole.log("x:", x)ดีกว่าconsole.log("x:" + x)? มันเกิดข้อผิดพลาดน้อยลงหรือไม่เนื่องจาก,อ่านง่ายกว่า a +?
เควินเมเรดิ ธ

ในความคิดของฉันมันง่ายต่อการอ่านเล็กน้อยเมื่อคุณแสดงสิ่งต่าง ๆ มากมาย ในกรณีนี้ควรใช้+อย่างเคร่งครัด แต่ฉันต้องการแสดงให้เห็นว่าคุณสามารถใช้เครื่องหมายจุลภาคในฟังก์ชั่นคอนโซลได้ นอกจากนี้ยังหลีกเลี่ยงปัญหาหากตัวแปรทั้งสองเป็นจำนวนเต็มหรืออาร์เรย์
Fred

5
console.log("x:", x)ดีกว่าอย่างมีนัยสำคัญเพราะเมื่อxเป็นวัตถุหรืออาร์เรย์ (หรืออะไรก็ได้ยกเว้นสตริง) มันจะแสดงอย่างถูกต้องโดยไม่ต้องแปลงเป็นสตริง
Josef Kufner

34

ไม่มีอะไรเกี่ยวข้องกับ jQuery และถ้าคุณต้องการใช้ฉันแนะนำให้คุณทำ

if (window.console) {
    console.log("your message")
}

ดังนั้นคุณจะไม่ทำลายรหัสของคุณเมื่อไม่พร้อมใช้งาน

ตามที่แนะนำในความคิดเห็นคุณยังสามารถดำเนินการได้ในที่เดียวจากนั้นใช้console.logตามปกติ

if (!window.console) { window.console = { log: function(){} }; }

18
ฉันขอแนะนำให้ทำif(!window.console){ window.console = function(){}; }แทนในที่เดียวแล้วใช้ console.log ตามปกติ
Fresheyeball

23

console.logไม่มีส่วนเกี่ยวข้องกับ jQuery เป็นวัตถุ / วิธีการทั่วไปที่มีให้โดย debuggers (รวมถึงตัวดีบัก Chrome และ Firebug) ที่อนุญาตให้สคริปต์บันทึกข้อมูล (หรือวัตถุในกรณีส่วนใหญ่) ไปยังคอนโซล JavaScript


19

console.logบันทึกข้อมูลการแก้ปัญหาไปยังคอนโซลในบางเบราว์เซอร์ (Firefox ที่ติดตั้ง Firebug, Chrome, IE8, อะไรก็ตามที่ติดตั้ง Firebug Lite) ใน Firefox เป็นเครื่องมือที่มีประสิทธิภาพมากช่วยให้คุณสามารถตรวจสอบวัตถุหรือตรวจสอบเค้าโครงหรือคุณสมบัติอื่น ๆ ขององค์ประกอบ HTML มันไม่เกี่ยวข้องกับ jQuery แต่มีสองสิ่งที่ทำได้โดยทั่วไปเมื่อใช้กับ jQuery:

  • ติดตั้งส่วนขยายFireQueryสำหรับ Firebug สิ่งนี้จะทำให้การบันทึกของวัตถุ jQuery ดูดีขึ้น

  • สร้าง wrapper ที่สอดคล้องกับระเบียบโค้ดของ jQuery

ซึ่งมักจะหมายถึงสิ่งนี้:

$.fn.log = function() {
    if (window.console && console.log) {
        console.log(this);
    }
    return this;
}

ซึ่งคุณสามารถเรียกเช่นนั้น

$('foo.bar').find(':baz').log().hide();

เพื่อตรวจสอบเครือข่าย jQuery ได้อย่างง่ายดาย


16

console.log ไม่มีส่วนเกี่ยวข้องกับ jQuery

มันบันทึกข้อความไปยังคอนโซลการดีบักเช่น Firebug


16

จุดที่สับสนบางครั้งก็คือการบันทึกข้อความพร้อมกับเนื้อหาของวัตถุใดวัตถุหนึ่งของคุณโดยใช้ console.log คุณจะต้องส่งผ่านหนึ่งในสองเป็นอาร์กิวเมนต์ที่แตกต่างกัน ซึ่งหมายความว่าคุณต้องแยกพวกเขาด้วยเครื่องหมายจุลภาคเพราะถ้าคุณต้องใช้ตัวดำเนินการ + เพื่อต่อผลลัพธ์ออกมาสิ่งนี้จะเรียก.toString()วิธีการของวัตถุของคุณโดยปริยาย สิ่งนี้ในกรณีส่วนใหญ่จะไม่ถูกยกเลิกอย่างชัดเจนObjectไม่ได้ให้ข้อมูลที่เป็นประโยชน์ใด ๆ

ตัวอย่างที่จะลองในคอนโซล:

>>> var myObj = {foo: 'bar'}
undefined
>>> console.log('myObj is: ', myObj);
myObj is: Object { foo= "bar"}

ในขณะที่ถ้าคุณพยายามเชื่อมข้อความที่เป็นข้อมูลพร้อมกับเนื้อหาของวัตถุคุณจะได้รับ:

>>> console.log('myObj is: ' + myObj);
myObj is: [object Object]

ดังนั้นโปรดทราบว่า console.log ในความเป็นจริงจะมีอาร์กิวเมนต์มากเท่าที่คุณต้องการ


13

ใช้console.logเพื่อเพิ่มข้อมูลการดีบักในหน้าของคุณ

หลายคนใช้alert(hasNinjas)เพื่อจุดประสงค์นี้ แต่console.log(hasNinjas)ทำงานได้ง่ายกว่า การใช้การแจ้งเตือนป็อปอัพกล่องโต้ตอบโมดอลที่บล็อกส่วนต่อประสานผู้ใช้

แก้ไข: ฉันเห็นด้วยกับBaptiste PernetและJan Hančičว่าเป็นความคิดที่ดีมากที่จะตรวจสอบว่าwindow.consoleมีการกำหนดไว้ก่อนหรือไม่เพื่อให้โค้ดของคุณไม่แตกหากไม่มีคอนโซล


12

ตัวอย่าง - สมมติว่าคุณต้องการทราบรหัสบรรทัดที่คุณสามารถเรียกใช้โปรแกรมของคุณ (ก่อนที่มันจะพัง!) เพียงพิมพ์

console.log("You made it to line 26. But then something went very, very wrong.")

11

คุณใช้เพื่อดีบักโค้ด JavaScript ด้วยFirebugสำหรับ Firefox หรือคอนโซล JavaScript ในเบราว์เซอร์WebKit

var variable;

console.log(variable);

มันจะแสดงเนื้อหาของตัวแปรแม้ว่ามันจะเป็นอาร์เรย์หรือวัตถุ

มันคล้ายกับprint_r($var);สำหรับPHP


3
เคล็ดลับที่มีประโยชน์ ... ฉันมักจะรวมสิ่งต่อไปนี้ในไฟล์จาวาสคริปต์ที่สามารถเข้าถึงได้ทั่วโลก: if (!window.console) { window.console = { log : function() {} }; }. สิ่งนี้จะช่วยให้คุณไม่ต้องลืมที่จะลบคำสั่ง debug เป็นครั้งคราว
roufamatic

@roufamatic ฉันไม่รู้ ... การเพิ่มโค้ดเพื่อจัดการโค้ดที่ไม่ได้เป็นของดูเหมือนว่าเป็นวิธีที่แย่มาก ... โดยเฉพาะอย่างยิ่งเมื่อค้นหา / แทนที่ง่ายมาก ...
jondavidjohn

10

ระวัง: การโทรออกจากคอนโซลในรหัสการผลิตของคุณจะทำให้ไซต์ของคุณแตกใน Internet Explorer อย่าทำให้มันคลาย ดู: https://web.archive.org/web/20150908041020/blog.patspam.com/2009/the-curse-of-consolelog


2
ไม่ใช่บันทึกของคอนโซลที่จะหยุดทำงานหากคุณใช้เครื่อง Windows แต่จะทำให้ไซต์ของคุณเสียหายหากคุณใช้ Internet Explorer
Kris Hollenbeck

ฉันคิดว่าบล็อกที่อ้างถึงในคำตอบไม่มีแล้ว
Tsundoku

ลิงค์เดิมเสียชีวิต ฉันพบสำเนาไฟล์เก็บถาวรของเว็บ
Alex

8

ในช่วงแรกการดีบัก JS ดำเนินการผ่านalert()ฟังก์ชั่น แต่ตอนนี้เป็นการฝึกที่ล้าสมัย

console.log()เป็นฟังก์ชั่นที่เขียนข้อความเข้าสู่ระบบคอนโซลแก้จุดบกพร่องเช่น Webkitหรือ Firebug ในเบราว์เซอร์คุณจะไม่เห็นอะไรเลยบนหน้าจอ มันบันทึกข้อความไปยังคอนโซลการดีบัก มีเฉพาะใน Firefox ที่มี Firebug และในเบราว์เซอร์ที่ใช้ Webkit (Chrome และ Safari) มันไม่ได้ทำงานได้ดีในทุกรุ่น IE

วัตถุคอนโซลเป็นส่วนขยายของ DOM

console.log()ควรใช้ในรหัสเฉพาะในช่วงการพัฒนาและแก้จุดบกพร่อง

ถือว่าเป็นการปฏิบัติที่ไม่ดีที่มีคนออกconsole.log()จากไฟล์จาวาสคริปต์บนเซิร์ฟเวอร์ที่ใช้งานจริง


5

หากเบราว์เซอร์ของคุณรองรับการดีบักคุณสามารถใช้วิธี console.log () เพื่อแสดงค่า JavaScript

เปิดใช้งานการดีบักในเบราว์เซอร์ของคุณด้วยF12และเลือก "คอนโซล" ในเมนูดีบักเกอร์

คอนโซลใน JavaScript ลองแก้ไขหรือ "debug" โปรแกรม JavaScript ที่ไม่ทำงานและฝึกโดยใช้คำสั่ง console.log () มีทางลัดที่จะช่วยให้คุณเข้าถึงคอนโซล JavaScript โดยอิงจากเบราว์เซอร์ที่คุณใช้:

แป้นพิมพ์ลัดของ Chrome Console

Windows: Ctrl+ Shift+ J
Mac: Cmd+ Option+J

แป้นพิมพ์ลัดของคอนโซล Firefox

Windows: Ctrl+ Shift+ K
Mac: Cmd+ Option+K

แป้นพิมพ์ลัดของ Internet Explorer Console

F12 สำคัญ

แป้นพิมพ์ลัดของ Safari Console

Cmd+ Option+C


4

console.logโดยเฉพาะเป็นวิธีการสำหรับนักพัฒนาในการเขียนรหัสเพื่อแจ้งให้ผู้พัฒนาทราบอย่างชัดเจนว่าโค้ดนั้นทำอะไร มันสามารถใช้เพื่อเตือนคุณว่ามีปัญหา แต่ไม่ควรแทนที่ดีบักเกอร์แบบโต้ตอบเมื่อถึงเวลาที่จะทำการดีบั๊กโค้ด ธรรมชาติของมันไม่ตรงกันหมายความว่าค่าที่บันทึกไว้ไม่จำเป็นต้องแทนค่าเมื่อมีการเรียกเมธอด

ในระยะสั้น: บันทึกข้อผิดพลาดด้วยconsole.log(ถ้ามี) จากนั้นแก้ไขข้อผิดพลาดโดยใช้ดีบักเกอร์ที่คุณเลือก: Firebug , เครื่องมือสำหรับนักพัฒนา WebKit (มีอยู่ในSafariและChrome ), IE Developer Tools หรือ Visual Studio


4

ฉันรู้สึกว่าการเขียนโปรแกรมเว็บง่ายมากเมื่อฉันเริ่มconsole.logการดีบั๊ก

var i;

ถ้าฉันต้องการตรวจสอบค่าของiruntime ..

console.log(i);

คุณสามารถตรวจสอบค่าปัจจุบันของiในแท็บคอนโซลของ firebug มันถูกใช้เป็นพิเศษสำหรับการแก้จุดบกพร่อง


4

มันถูกใช้เพื่อเข้าสู่ระบบ (ทุกสิ่งที่คุณผ่านมัน) ไปยังคอนโซลFirebug การใช้งานหลักคือการดีบักโค้ด JavaScript ของคุณ


4

นอกเหนือจากประเพณีที่กล่าวถึงข้างต้นแล้วconsole.logยังสามารถพิมพ์ไปยังเครื่องปลายทางnode.jsได้ เซิร์ฟเวอร์ที่สร้างด้วย express (เช่น) สามารถใช้console.logเพื่อเขียนไปยังไฟล์ตัวบันทึกเอาต์พุต


2

ในสคริปต์จาวาไม่มีฟังก์ชั่นอินพุตและเอาต์พุต ดังนั้นการ debug รหัส console.log () วิธีการใช้มันเป็นวิธีการเข้าสู่ระบบ มันจะถูกพิมพ์ภายใต้บันทึกของคอนโซล (เครื่องมือในการพัฒนา)

ไม่มีอยู่ใน IE8 และต่ำกว่าจนกว่าคุณจะเปิดเครื่องมือการพัฒนา IE


2

นี่คือไม่มีอะไรจะจัดการกับ jQuery การconsole.log()อ้างอิงไปยังฟังก์ชั่นการบันทึกของวัตถุคอนโซลซึ่งให้วิธีการในการบันทึกข้อมูลไปยังคอนโซลของเบราว์เซอร์ วิธีการเหล่านี้มีจุดประสงค์เพื่อการดีบักเท่านั้นและไม่ควรเชื่อถือในการนำเสนอข้อมูลแก่ผู้ใช้ปลายทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.