Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

กฎของการแทรกเซมิโคลอนอัตโนมัติ (ASI) ใน JavaScript คืออะไร?

การแทรกเซมิโคลอนอัตโนมัติ (Automatic Semicolon Insertion - ASI) ของ JavaScript เป็นกลไกที่ช่วยแทรกเซมิโคลอนที่ขาดหายไป โดยคำสั่งต่อไปนี้ได้รับผลกระทบจาก ASI:

คำสั่งว่าง (empty statement)  คำสั่งตัวแปร (var statement)  คำสั่งนิพจน์ (expression statement)  คำสั่ง do-while  คำสั่ง continue  คำสั่ง break  คำสั่ง return  คำสั่ง throw

กฎระเบียบอยู่ในข้อกำหนดดังนี้:

  • เมื่อ Script หรือ Module ถูกแยกวิเคราะห์ (parse) จากซ้ายไปขวา: หากพบโทเค็นที่ไม่ได้รับอนุญาตโดยกฎไวยากรณ์ใดๆ เซมิโคลอนจะถูกแทรกอัตโนมัติก่อนโทเค็นที่ผิดปกตินั้น ก็ต่อเมื่อเงื่อนไขอย่างน้อยหนึ่งข้อเป็นจริง:
  • โทเค็นที่ผิดปกติคือ }
  • โทเค็นก่อนหน้าคือ ) และเซมิโคลอนที่แทรกเข้าไปจะถูกแปรรูปเป็นเซมิโคลอนปิดท้ายของคำสั่ง do-while (13.7.2)
  • พบจุดสิ้นสุดของสตรีมโทเค็น และพาร์เซอร์ไม่สามารถแยกวิเคราะห์สตรีมโทเค็นอินพุตเป็น ECMAScript หรือ Module ที่สมบูรณ์ได้ เซมิโคลอนจึงถูกแทรกอัตโนมัติ
  • พบโทเค็นที่ได้รับอนุญาตโดยกฎไวยากรณ์บางกฎ แต่กฎนั้นเป็น restricted production และโทเค็นจะเป็นโทเค็นแรกสำหรับ terminal หรือ nonterminal ที่อยู่ทันทีหลัง annotation

แม้ ASI จะช่วยลดความผิดพลาดได้ แต่แนวทางปฏิบัติที่ดีที่สุดคือควรใส่เซมิโคลอนด้วยตนเองเสมอ เพื่อป้องกันพฤติกรรมที่คาดเดาไม่ได้และเพิ่มความชัดเจนของโค้ด

การแทรกเซมิโคลอนอัตโนมัติ (Automatic Semicolon Insertion - ASI) ของ JavaScript เป็นกลไกที่ช่วยแทรกเซมิโคลอนที่ขาดหายไป โดยคำสั่งต่อไปนี้ได้รับผลกระทบจาก ASI:

คำสั่งว่าง (empty statement)  คำสั่งตัวแปร (var statement)  คำสั่งนิพจน์ (expression statement)  คำสั่ง do-while  คำสั่ง continue  คำสั่ง break  คำสั่ง return  คำสั่ง throw

กฎระเบียบอยู่ในข้อกำหนดดังนี้:

  • เมื่อ Script หรือ Module ถูกแยกวิเคราะห์ (parse) จากซ้ายไปขวา: หากพบโทเค็นที่ไม่ได้รับอนุญาตโดยกฎไวยากรณ์ใดๆ เซมิโคลอนจะถูกแทรกอัตโนมัติก่อนโทเค็นที่ผิดปกตินั้น ก็ต่อเมื่อเงื่อนไขอย่างน้อยหนึ่งข้อเป็นจริง:
  • โทเค็นที่ผิดปกติคือ }
  • โทเค็นก่อนหน้าคือ ) และเซมิโคลอนที่แทรกเข้าไปจะถูกแปรรูปเป็นเซมิโคลอนปิดท้ายของคำสั่ง do-while (13.7.2)
  • พบจุดสิ้นสุดของสตรีมโทเค็น และพาร์เซอร์ไม่สามารถแยกวิเคราะห์สตรีมโทเค็นอินพุตเป็น ECMAScript หรือ Module ที่สมบูรณ์ได้ เซมิโคลอนจึงถูกแทรกอัตโนมัติ
  • พบโทเค็นที่ได้รับอนุญาตโดยกฎไวยากรณ์บางกฎ แต่กฎนั้นเป็น restricted production และโทเค็นจะเป็นโทเค็นแรกสำหรับ terminal หรือ nonterminal ที่อยู่ทันทีหลัง annotation

แม้ ASI จะช่วยลดความผิดพลาดได้ แต่แนวทางปฏิบัติที่ดีที่สุดคือควรใส่เซมิโคลอนด้วยตนเองเสมอ เพื่อป้องกันพฤติกรรมที่คาดเดาไม่ได้และเพิ่มความชัดเจนของโค้ด