ไม่มีอะไรผิดปกติในการใช้งาน$
ตัวแปร ฉันจะไม่ทำตามวัตถุประสงค์ในทุกตัวแปร แต่ก็ยังเป็นไวยากรณ์ที่ถูกต้อง jQuery เป็นหนึ่งในตัวอย่างที่$
ใช้เป็นชื่อตัวแปร นั่นเป็นสาเหตุที่"เครื่องมือ dev ของ Chrome ไม่เคยเห็นว่านี่เป็นข้อผิดพลาดของ Javascript"เนื่องจากไม่มีข้อผิดพลาดในตอนแรก
หากคุณกลัวการเขียนโค้ดเช่น:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
แล้วคุณจะต้องใช้ตัวตรวจสอบรูปแบบเช่นJSlint , jsHintหรือGoogle ปิด Linter หนึ่งในนั้นคืออะไร? มันขึ้นอยู่กับคุณที่จะเลือก เพื่อช่วยให้คุณมีสิ่งต่อไปนี้เป็นหมายเหตุเล็กน้อย:
สไตล์
Google Closure Linter เป็นไปตามคู่มือสไตล์ของ Google JavaScriptซึ่งเป็นที่รู้กันว่าทำอย่างชาญฉลาด การใช้สไตล์ที่รู้จักกันดีสำหรับ JavaScript หรือภาษาอื่น ๆ หกภาษาเป็นความคิดที่ดี: เมื่อคุณแชร์รหัสของคุณหรือจ้างนักพัฒนาใหม่โอกาสที่พวกเขาจะคุ้นเคยกับสไตล์นี้อยู่แล้ว
นักพัฒนาหลายคนคุ้นเคยกับสไตล์ Douglas Crockford เช่นกัน สไตล์นี้มีการอธิบายโดยละเอียดในJavaScript: The Good Partsหนังสือที่ควรซื้อทุกคนที่ทำงานกับ JavaScript
สำหรับ jsHint ฉันไม่สามารถค้นหาสิ่งที่ใช้ในการประชุมได้และเว็บไซต์ดูเหมือนว่าจะหลีกเลี่ยงการพูดถึงเรื่องนั้น บางทีฉันอาจจะพลาดบางสิ่งบางอย่าง
สนับสนุนโดย IDEs
ทั้งสอง JSlint และ jsHint ได้รับการสนับสนุนโดย PhpStorm นี่เป็นกรณีของ Google Closed Linter
สิ่งแวดล้อม
Google ปิด Linter เป็นหนึ่งในชุดของเครื่องมือ หากคุณใช้Google Closure CompilerหรือGoogle Closure Library อยู่แล้วคุณควรเลือกที่จะปิด Linter เหนือเครื่องมืออื่น ๆ
ความเข้มงวด
jsLint เป็นที่รู้กันว่าเข้มงวด jsHint อนุญาตได้ดีกว่าซึ่งไม่ใช่สิ่งที่ดีเสมอไป ตัวอย่างเช่นหนึ่งในเหตุผลในการแยก jsLint สำหรับ jsHint มีการอธิบายไว้ในบทความที่แสดงรหัสที่ไม่ดีซึ่งจะสร้างข้อผิดพลาดใน jsLint แต่ไม่ใช่ jsHint:
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
รหัสไม่ดีเนื่องจากดูเหมือนว่า JavaScript มีขอบเขตบล็อกในขณะที่มันไม่ได้ ดู JavaScript: The Good Parts, p. 102, ภาคผนวก A: ส่วนที่น่ากลัว, ขอบเขต กล่าวอีกนัยหนึ่งคือการดูรหัสโดยไม่ทราบภาษาเราคาดว่าname
จะไม่สามารถมองเห็นได้นอกวงในขณะที่มันจะยังคงมองเห็นได้
สำหรับ Google Closed Linter ฉันเชื่อว่ามันอยู่ตรงกลางระหว่าง jsLint และ jsHint แต่ฉันมีข้อมูลไม่เพียงพอที่จะสนับสนุนสิ่งนั้น
ข้อสรุป
ฉันจะหลีกเลี่ยง jsHint: อนุญาตเกินไปหมายความว่าจะไม่พบข้อบกพร่องที่อาจเกิดขึ้นซึ่ง linters อื่น ๆ จะตรวจจับ คู่มือสไตล์ที่ใช้นั้นหายาก
ในบรรดา jsLint และ Google Closure Linter ตัวเลือกไม่ชัดเจน ทั้งสองเขียนโดยผู้เชี่ยวชาญทั้งสองปฏิบัติตามคำแนะนำสไตล์ที่เข้มงวดอธิบายได้ดีแล้วตามด้วยนักพัฒนาหลายพันคน ใช้ทั้งสองครั้งแล้วเลือกอันที่เหมาะกับคุณมากกว่า