diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md index f18e0af14..3a412e147 100644 --- a/1-js/01-getting-started/1-intro/article.md +++ b/1-js/01-getting-started/1-intro/article.md @@ -1,122 +1,122 @@ -# มาทำความรู้จักจาวาสคริปต์ +# การเรียนรู้เบื้องต้นเกี่ยวกับภาษา JavaScript -มาดูกันว่าจาวาสคริปต์ทำอะไรได้บ้าง มีอะไรพิเศษ และสำรวจเทคโนโลยีในโลกจาวาสคริปต์กัน +มาดูว่ามีอะไรที่พิเศษกับภาษา JavaScript บ้าง และเราสามารถทำอะไรได้ด้วยภาษา JavaScript บ้าง รวมถึงเทคโนโลยีอื่นๆที่เข้ากันได้ดีกับ JavaScript อีกด้วย -## จาวาสคริปต์คืออะไร +## JavaScript คืออะไร? -เริ่มแรกเดิมที *จาวาสคริปต์* มีหน้าที่ทำให้เว็บไซต์ *ดูกับราวมีชีวิต* +เริ่มต้นด้วยการสร้าง JavaScript เพื่อ "ทำให้หน้าเว็บมีชีวิตชีวา" -โปรแกรมแบบนี้เรียกกันว่า *สคริปต์* โปรแกรมจะถูกเขียนลงบนไฟล์ HTML และทำงานอัตโนมัติเมื่อโหลดหน้าเว็บ +โปรแกรมในภาษานี้เรียกว่า *สคริปต์ (scripts)* โดยสามารถเขียนได้โดยตรงใน HTML ของหน้าเว็บและจะถูกเรียกใช้โดยอัตโนมัติเมื่อหน้าเว็บโหลด -สคริปต์ดังกล่าวจะทำงานได้เหมือนการแสดงข้อความทั่วไป ที่ไม่จำเป็นต้องติดตั้งโปรแกรม หรือคอมไพล์ไฟล์ดังกล่าวไว้ก่อน +สคริปต์จะถูกให้และดำเนินการโดยใช้ข้อความธรรมดา ไม่จำเป็นต้องเตรียมการหรือคอมไพล์เพื่อให้ทำงานได้ -ด้วยเรื่องนี้ทำให้จาวาสคริปต์แตกต่างไปจากภาษาที่ชื่อคล้ายกันอย่าง [จาวา](https://th.wikipedia.org/wiki/ภาษาจาวา)​ (Java) +ในด้านนี้ JavaScript แตกต่างอย่างมากจากภาษาอื่นๆ เช่น [Java](https://th.wikipedia.org/wiki/ภาษาจาวา) -```smart header="Why JavaScript?" -ในตอนแรกจาวาสคริปต์มีชื่อว่า "LiveScript" แต่ด้วยความที่ภาษาจาวาดังมากในตอนนั้น ผู้สร้างเลยตัดสินใจเปลี่ยนชื่อภาษานี้เป็นจาวาสคริปต์ เพื่อหวังผลว่าชื่อของจาวาจะให้ส่งเสริมให้นักพัฒนาคนอื่นๆหันมาใช้ภาษาใหม่นี้ ในฐานะน้องเล็กของภาษาจาวา +```smart header="ทำไมถึงเรียกว่า JavaScript?" +เมื่อสร้าง JavaScript ขึ้นมาในตอนแรก มีชื่อเรียกอื่น ๆ ที่เรียกว่า "LiveScript" แต่เนื่องจากภาษา Java ได้รับความนิยมอย่างมากในสมัยนั้น จึงตัดสินใจที่จะตั้งชื่อภาษาใหม่เป็น "น้องของภาษา Java" เพื่อช่วยให้มีความนิยมมากขึ้น -จาวาสคริปต์ก็วิวัฒนาการในทางของตัวเอง ก็เติบใหญ่จนพร้อมเป็นอิสระเสียแล้ว มีผู้พัฒนาฟีเจอร์และสเปคของภาษาเรียกกันว่า "[ECMAScript](https://th.wikipedia.org/wiki/อีซีเอ็มเอสคริปต์) (เอ็กม่าสคริปต์ ชื่อไม่เป็นทางการ)" +แต่เมื่อ JavaScript พัฒนาต่อไป มันกลายเป็นภาษาอิสระอย่างสมบูรณ์ที่มีข้อกำหนดของตัวเองที่เรียกว่า [ECMAScript](https://th.wikipedia.org/wiki/อีซีเอ็มเอสคริปต์) และตอนนี้มันไม่มีความเกี่ยวข้องกับภาษา Java อีกต่อไป ``` -ในทุกวันนี้จาวาสคริปต์ไม่จำเป็นต้องใช้เว็บเบราเซอร์ในการทำงานอีกแล้ว เพราะจาวาสคริปต์สามารถทำงานได้บนเซิฟเวอร์หรืออุปกรณ์อะไรก็ได้ ที่ติดตั้งโปรแกรมพิเศษที่ชื่อ [JavaScript engine (จาวาสคริปต์เอนจิน)](https://en.wikipedia.org/wiki/JavaScript_engine). +ในปัจจุบัน JavaScript สามารถทำงานได้ไม่เพียงแค่ในเบราว์เซอร์ แต่ยังสามารถทำงานบนเซิร์ฟเวอร์หรืออุปกรณ์อื่น ๆ ที่มีโปรแกรมพิเศษที่เรียกว่า [the JavaScript engine](https://en.wikipedia.org/wiki/JavaScript_engine) -เว็บบราวเซอร์จะฝังตัวจาวาสคริปต์เอนจินไว้อยู่แล้ว ซึ่งก็มีชื่อเฉพาะว่า "JavaScript virtual machine (จาวาสคริปต์เวอชวลมะชีน)" +เบราว์เซอร์มีเครื่องมือที่ฝังอยู่ภายในบางครั้งเรียกว่า "เครื่องจำลอง JavaScript (JavaScript virtual machine)" -เอนจินต่างกัน ก็ใช้ชื่อ (codename) ต่างกันไปอีกอย่างเช่น +เครื่องมือที่แตกต่างกันจะมี "ชื่อรหัส" ที่แตกต่างกันออกไป เช่น: -- [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) -- ใช้ใน Chrome, Opera และ Edge -- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- ใช้เฉพาะ Firefox -- ...ยังมีชื่อเอนจินอื่นๆเช่น Chakra ใช้ใน Internet Explorer, JavaScriptCore ใช้ใน Nitro และ SquirrelFish ใช้ใน Safari +- [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) -- ใน Chrome, Opera และ Edge +- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- ใน Firefox +- ... ยังมีรหัสชื่ออื่น ๆ เช่น "Chakra" สำหรับ IE, "JavaScriptCore", "Nitro" และ "SquirrelFish" สำหรับ Safari เป็นต้น -การจำชื่อเอนจิ้นจะทำให้เรารู้ว่าฟีเจอร์ใหม่ๆบนจาวาสคริปต์สามารถใช้ในบนเอนจินตัวใดบ้าง ตัวอย่างเช่น ฟีเจอร์ X ถูกรองรับในเอนจิน V8 นั้นหมายถึงว่า ฟีเจอร์ X สามารถใช้ได้ใน Chrome, Opera และ Edge +คำศัพท์เหล่านี้เป็นสิ่งที่ควรจำไว้ เนื่องจากถูกใช้ในบทความของนักพัฒนาบนอินเทอร์เน็ต และเราก็จะใช้เหมือนกัน ตัวอย่างเช่นหาก "คุณลักษณะ X ได้รับการสนับสนุนโดย V8" จะหมายความว่ามันพร้อมทำงานใน Chrome, Opera และ Edge อาจใช้งานได้ -```smart header="แล้วเอนจินทำงานยังไง?" +```smart header="เครื่องมือทำงานอย่างไร" -เอนจินเป็นเรื่องซับซ้อน หากแต่หลักการนั้นเป็นเรื่องง่าย +เครื่องมือนั้นมีขั้นตอนที่ซับซ้อน แต่พื้นฐานนั้นไม่ยากเลย -1. เอนจินอ่านสคริปต์ -2. เอนจินแปล (บ้างเรียกคอมไพล์) ภาษาสคริปต์เป็นภาษาเครื่อง -3. เครื่องอ่านภาษาเครื่องและทำงานตามนั้น ในเวลาเพียงเสี้ยววินาที +1. เครื่องมือ (ถ้าเป็นเบราว์เซอร์จะอยู่ในตัวซึ่งฝังอยู่) อ่านและแยกวิเคราะห์ ("parse") สคริปต์ +2. จากนั้นแปลงสคริปต์เป็น ("compile") รหัสเครื่อง +3. แล้วรหัสเครื่องจะทำงานอย่างรวดเร็ว -ตัวเอนจินเริ่ม optimizations ในแต่ละขั้นตอน โดยการ เอนจินยังคอยตรวจสอบสคริปต์ขณะคอมไพล์ว่าสามารถทำงานได้ไหม วิเคราห์ flow ของข้อมูล กระทั่งทำการเพิ่มประสิทธิภาพของภาษาเครื่องอีกด้วย +เครื่องมือพิมพ์นี้มีการปรับปรุงเทคนิคต่าง ๆ ในแต่ละขั้นตอนของกระบวนการ มันยังสังเกตรหัสเครื่องที่ถูกแปลงไว้เมื่อมันทำงาน วิเคราะห์ข้อมูลที่ไหลผ่านไปในรหัสเครื่อง และปรับปรุงรหัสเครื่องอย่างเหมาะสมตามความรู้นั้น ๆ ``` -## แล้วจาวาสคริปต์บนบราวเซอร์สามารถทำอะไรได้บ้าง +## JavaScript ที่ทำงานในเบราว์เซอร์สามารถทำอะไรได้บ้าง? -จาวาสคริปต์เป็นภาษาโปรแกรมมิ่งที่ "ปลอดภัย" เพราะว่าจาวาสคริปต์ไม่สามารถเข้าถึงหน่วยความจำ ควบคุมซีพียูได้ เพราะว่าจาวาสคริปต์ทำงานอยู่บนเว็บบราวเซอร์ ที่ไม่ได้ต้องการความสามารถดังกล่าวอยู่แล้ว +JavaScript เวอร์ชันปัจจุบันเป็นภาษาโปรแกรมที่ "ปลอดภัย" มันไม่ได้ให้การเข้าถึงหน่วยความจำหรือ CPU ระดับต่ำเนื่องจากว่าเคยถูกสร้างขึ้นสำหรับเบราว์เซอร์ที่ไม่จำเป็นต้องการคุณลักษณะนี้ -ความสามารถของจาวาสคริปต์จึงขึ้นอยู่กับ environment (เอนไว'เรินเมินทฺ) ที่จาวาสคริปต์ทำงานด้วย อย่างเช่น [Node.js](https://wikipedia.org/wiki/Node.js) ที่อนุญาตให้จาวาสคริปต์สามารถอ่านหรือเขียนไฟล์ได้, ส่ง request หา endpoint อื่นๆ, และความสามารถอื่นๆอีกมากมาย +ความสามารถของ JavaScript นั้นจะขึ้นอยู่กับสภาพแวดล้อมที่มันกำลังทำงานอยู่ ตัวอย่างเช่น [Node.js](https://wikipedia.org/wiki/Node.js) รองรับฟังก์ชันที่อนุญาตให้ JavaScript อ่าน/เขียนไฟล์อื่น ๆ ส่งคำขอเครือข่ายไปยังเซิร์ฟเวอร์ ฯลฯ -บนเบราเซอร์จาวาสคริปต์ก็สามารถทำทุกอย่างที่เกี่ยวข้องกับ การจัดการเว็บไซต์ การโต้ตอบผู้ใช้งาน รวมไปถึง เป็นเว็ปเซิฟเวอร์ +JavaScript ที่ทำงานในเบราว์เซอร์สามารถทำได้ทุกอย่างที่เกี่ยวข้องกับการจัดการหน้าเว็บไซต์ การติดต่อกับผู้ใช้ และเว็บเซิร์ฟเวอร์ -ตัวอย่างเช่น +ตัวอย่างเช่น JavaScript ในเบราว์เซอร์สามารถ: -- เพิ่มหรือจัดการกับ HTML, เพิ่ม แก้ไข หรือ ลบ เนื้อหาบนเว็บไซต์, เปลี่ยนรูปลักษณ์ของเว็บไซต์ -- ตอบโต้การกระทำจากผู้ใช้ ทำงานเมื่อคลิกเมาส์ จับการเคลื่อนไหวของเมาส์ หรือ การกดบนแป้นพิมพ์ -- ส่ง request ผ่านเครือข่ายไปยังเซิฟเวอร์, ดาวน์โหลด และอัพโหลดไฟล์ หรือที่เรียกว่า [AJAX](https://th.wikipedia.org/wiki/เอแจ็กซ์) (เอแจ็กซ์) และ [COMET](https://en.wikipedia.org/wiki/Comet_(programming)) (คัม'มิท) -- รับ และ ตั้งค่าคุกกี้ (cookies) ถามคำถามผู้ใช้งาน หรือ แสดงข้อความ -- จำจดข้อมูลในฝั่งไคลเอ็นต์ (client-side) หรือที่เรียกว่าที่เก็บข้อมูลในตัวเครื่อง (local storage) +- เพิ่ม HTML ใหม่เข้าไปในหน้าเว็บไซต์ เปลี่ยนเนื้อหาที่มีอยู่และเปลี่ยนรูปแบบ +- ตอบสนองต่อการกระทำของผู้ใช้ เช่น การคลิกเมาส์ การเลื่อนเมาส์ การกดปุ่ม +- ส่งคำขอไปยังเซิร์ฟเวอร์ระยะไกล เพื่อดาวน์โหลดและอัปโหลดไฟล์ (เทคโนโลยีที่เรียกว่า [AJAX](https://th.wikipedia.org/wiki/เอแจ็กซ์) และ [COMET](https://en.wikipedia.org/wiki/Comet_(programming))) +- รับและกำหนดคุกกี้ สอบถามคำถามกับผู้เข้าชมและแสดงข้อความ +- จำข้อมูลไว้ในเครื่องของผู้ใช้ (การจัดเก็บข้อมูลฝั่งไคลเอ็นต์) -## แล้วจาวาสคริปต์บนเบราเซอร์ทำอะไรไม่ได้บ้าง +## JavaScript ที่ทำงานในเบราว์เซอร์ไม่สามารถทำสิ่งต่อไปนี้ได้: -ความสามารถของจาวาสคริปจ์ในเบราว์เซอร์ถูกจำกัดเพื่อความปลอดภัยของผู้ใช้ จุดมุ่งหมายคือเพื่อป้องกันไม่ให้หน้าเว็บที่ที่ประสงค์ร้ายเข้าถึงข้อมูลส่วนตัวหรือทำอันตรายต่อข้อมูลของผู้ใช้ +ความสามารถของ JavaScript ในเบราว์เซอร์ถูกจำกัดเพื่อปกป้องความปลอดภัยของผู้ใช้ จุดมุ่งหมายคือป้องกันเว็บเพจที่ไม่ดีจากการเข้าถึงข้อมูลส่วนตัวหรือทำความเสียหายกับข้อมูลของผู้ใช้ -ตัวอย่างเช่น +ตัวอย่างของการจำกัดเช่น: -- จาวาสคริปต์บนเบราเซอร์ไม่สามารถอ่านหรือเขียนไฟล์ใดๆบนฮาร์ดดิสก์ คัดลอกหรือสั่งโปรแกรมอื่นๆทำงาน ไม่สามารถเข้าถึงฟังก์ชั่นของระบบปฎิบัติการ (OS) ได้ +- JavaScript ในหน้าเว็บไซต์ไม่สามารถอ่าน/เขียนไฟล์บนฮาร์ดดิสก์ คัดลอกไฟล์หรือเรียกใช้โปรแกรมได้โดยตรง เนื่องจากไม่มีการเข้าถึงฟังก์ชั่นของระบบปฏิบัติการโดยตรง - เบราเซอร์ในทุกวันนี้อนุญาตให้ทำงานกับไฟล์ได้ แต่ก็มีข้อจำกัดไว้ โดยทำได้เพียงแค่บางอย่างเท่านั้น เช่น วางไฟล์จากเครื่องบนหน้าต่างเบราเซอร์ + เบราว์เซอร์รุ่นใหม่อนุญาตให้ JavaScript ทำงานกับไฟล์ได้ แต่การเข้าถึงถูกจำกัดเพื่อป้องกันการเข้าถึงไม่ได้รับอนุญาต และจะมีการให้สิทธิพิเศษเฉพาะกรณีที่ผู้ใช้ดำเนินการบางอย่าง เช่น "ลาก" ไฟล์ลงในหน้าต่างเบราว์เซอร์หรือเลือกไฟล์ผ่านแท็ก `` - นอกจากนี้ยังอนุญาตให้เข้าถึงกล้อง ไมโครโฟน และอุปกรณ์อื่นๆ แต่ต้องได้รับอนุญาตจากผู้ใช้งานก่อน -- หน้าต่างและแท็บต่างกันก็ไม่รู้ตัวตนของอีกฝ่าย แต่จะรู้เมื่อจาวาสคริปต์สั่งเบราเซอร์เปิดอีกแท็บหรือหน้าต่างหนึ่งมา แต่ในกรณีนี้ จาวาสคริปต์หน้าหนึ่ง จะไม่สามารถเข้าถึงอะไรก็ตามของอีกหน้าหนึ่งได้ เมื่อมาจากต่างเว็บไซต์ ต่างพอร์ต (port) ต่างโดเมน ต่างโปรโตคอล และอื่นๆ + การทำงานร่วมกับกล้อง/ไมค์และอุปกรณ์อื่นๆ ต้องได้รับอนุญาตจากผู้ใช้โดยตรง ดังนั้นหน้าเว็บไซต์ที่เปิดใช้งาน JavaScript ไม่สามารถเปิดกล้องเว็บแบบลับๆ และดูสิ่งแวดล้อมได้เพื่อส่งข้อมูลให้กับ [NSA](https://en.wikipedia.org/wiki/National_Security_Agency) ได้ +- แท็บ/หน้าต่างที่เปิดชึ้นมาแต่ละอันจะไม่รู้กัน แต่ในบางกรณี ทั้งสองหน้าต่างรู้จักกัน เช่นเมื่อหน้าต่างหนึ่งใช้ JavaScript เพื่อเปิดอีกหน้าต่างหนึ่ง แต่ในกรณีนี้ JavaScript จากหน้าเว็บไซต์หนึ่งไม่สามารถเข้าถึงหน้าเว็บไซต์อื่นได้หากหน้าเว็บไซต์เหล่านั้นมาจากไซต์ต่างกัน (มาจากโดเมนที่แตกต่างกัน โปรโตคอลที่แตกต่างกัน หรือพอร์ตที่แตกต่างกัน) - ในที่นี้เรียกกันว่า "Same Origin Policy" ดังนั้นใน*ทั้งสองหน้า*จะต้องยอมรับการแลกเปลี่ยนข้อมูลระหว่างกัน จาวาสคริปต์จึงมีฟีเจอร์มาเพื่อจัดการกับปัญหาข้างต้น จะมีพูดถึงเรื่องนี้กันอีกทีในภายหลังด้วย -้ - ความปลอดภัยของผู้ใช้จึงมาพร้อมกับข้อจำกัด ดังนั้นเว็บไซต์ A จะไม่สามารถขโมยข้อมูล gmail.com ที่เปิดอีกแท็บหนึ่งได้ -- จาวาสคริปต์สติดต่อเซิฟเวอร์ผ่านเน็ตได้สบายหากเป็นแหล่งที่มาเดียวกัน แต่ก็มีข้อจำกัด เมื่อต้องรับส่งข้อมูลระหว่างเว็บไซต์หรือโดเมนที่ต่างกัน แม้ว่าจะมีทาง แต่ก็ต้องมีข้อตกลงระหว่างทั้งสอง อย่างเช่น HTTP headers ทั้งนี้เหตุผลก็มาจากความปลอดภัยของผู้ใช้งานอีกเช่นกัน + นี้เป็นที่เรียกว่า "Same Origin Policy" หรือนโยบายของเว็บเบราว์เซอร์เพื่อปกป้องผู้ใช้ ในการทำงานร่วมกัน หน้าเว็บไซต์ทั้งสองต้องตกลงกันในการแลกเปลี่ยนข้อมูล และต้องมีโค้ด JavaScript พิเศษเพื่อจัดการเรื่องดังกล่าว เราจะอธิบายรายละเอียดในบทสอน + + ข้อจำกัดนี้เป็นเพื่อความปลอดภัยของผู้ใช้ หน้าเว็บไซต์จาก `http://anysite.com` ที่ผู้ใช้เปิดอยู่ต้องไม่สามารถเข้าถึงแท็บเบราว์เซอร์อื่น ๆ ที่มี URL เป็น `http://gmail.com` และขโมยข้อมูลจากเว็บที่เปิดอยู่ในแท็ปไปมาได้ +- JavaScript สามารถสื่อสารผ่านเครือข่ายได้อย่างง่ายดายกับเซิร์ฟเวอร์ที่หน้าเว็บปัจจุบันมาจาก แต่ความสามารถของ JavaScript ในการรับข้อมูลจากโดเมน/ไซต์อื่น ๆ ถูกจำกัดไว้ อาจจะเป็นไปได้ แต่จำเป็นต้องมีความตกลงชัดเจน (ที่แสดงใน HTTP headers) จากฝั่งระยะไกล อีกครั้งนี้ก็เป็นข้อจำกัดเพื่อความปลอดภัย ![](limitations.svg) -ข้อจำกัดดังกล่าวมีเฉพาะบนเว็บเบราเซอร์เท่านั้น นอกจากนี้เบราเซอร์ทุกวันนี้ก็ยังอนุญาตให้ใช้ปลั๊กอิน บ้างเรียกส่วนขยาย (extensions) ซึ่งอาจขอสิทธิ์อนุญาตจากเบราเซอร์เพิ่มเติมได้ +ข้อจำกัดดังกล่าวไม่มีอยู่หาก JavaScript ถูกใช้นอกเว็บเบราว์เซอร์ เช่น บนเซิร์ฟเวอร์ นอกจากนี้ เบราว์เซอร์ที่มีความทันสมัยยังอนุญาตให้ใช้ปลั๊กอิน/ส่วนขยายซึ่งอาจขอสิทธิ์เพิ่มเติมได้ -## สิ่งที่ทำให้จาวาสคริปต์ไม่เหมือนใคร +## ที่ทำให้ JavaScript โดดเด่นและเป็นเอกลักษณ์คือสิ่งใด? -มีสามอย่างใหญ่ๆที่ทำให้จาวาสคริปต์ไม่เหมือนใคร +นี่คืออย่างน้อยสามสิ่งที่ยอดเยี่ยมของ JavaScript: ```compare -+ ทำงานร่วมกับ HTML/CSS ได้อย่างสมบูรณ์ -+ เรื่องง่ายๆ ก็ทำได้ง่ายๆ -+ เบราเซอร์ใหญ่ๆให้การสนับสนุน ++ การผสมผสานอย่างเต็มรูปแบบกับ HTML/CSS ++ การทำสิ่งที่เรียกว่า 'ง่าย' อย่างแท้จริงได้อย่างง่ายดาย ++ รองรับโดยเบราว์เซอร์ทุกตัวและเปิดใช้งานโดยค่าเริ่มต้น ``` -จาวาสคริปต์เป็นเทคโนโลยีเบราเซอร์ที่รวมสามสิ่งนี้ +JavaScript เป็นเทคโนโลยีบราวเซอร์เพียงหนึ่งเดียวที่ผสมผสานสามสิ่งดังกล่าวได้พร้อมกัน -ทำให้จาวาสคริปต์มีความไม่เหมือนใคร จึงเป็นเหตุผลที่เทคโนโลยีนี้ถูกใช้แพร่หลายที่สุด ในการสร้างส่วนต่อผสานกับเบราเซอร์ +นี่คือสิ่งที่ทำให้ JavaScript เป็นเอกลักษณ์และโดดเด่น เป็นเหตุผลที่มันเป็นเครื่องมือที่แพร่หลายที่สุดสำหรับการสร้างอินเตอร์เฟซของเบราว์เซอร์ -สร้างเซิฟเวอร์ หรือแอพฯบนมือถือและอื่นๆ +อย่างไรก็ตาม JavaScript ก็สามารถใช้สร้างเซิร์ฟเวอร์, แอปพลิเคชันมือถือ เป็นต้นได้อีกด้วย -## ภาษาที่ "นอกเหนือจาก" จาวาสคริปต์ +## ภาษาโปรแกรมอื่นๆที่สามารถแปลงเป็น JavaScript ได้ -syntax ของจาวาสคริปต์ไม่ได้ตอบโจทย์ความต้องการได้ทุกคน ต่างคนก็ต่างต้องการฟีเจอร์ในแบบของตัวเอง +ไวยากรณ์ของภาษา JavaScript ไม่ใช่สิ่งที่ตรงตามความต้องการของทุกคน แต่ละคนมีความต้องการสไตล์การเขีนรและความสามารถของภาษาที่แตกต่างกันไป -โจทย์จึงแตกต่างกันไปตาม project และ requirement ของแต่ละคน +นั่นเป็นสิ่งที่คาดหวังได้เนื่องจากโครงการและความต้องการของแต่ละคนไม่เหมือนกัน -เพียงไม่กี่ปีมานี้ ภาษาใหม่ๆจึงถือกำเนิดขึ้นจำนวนมาก ซึ่งจะแปลงเป็นจาวาสคริปต์ก่อน จะทำงานบนเบราเซอร์ +ดังนั้น เร็วๆ นี้มีภาษาหลายๆตัวที่ถูกสร้างขึ้นมา และถูกแปลง (transpile) เป็นภาษา JavaScript ก่อนที่จะทำงานในเบราว์เซอร์ -เครื่องมือในทุกวันนี้ช่วยให้การแปลเป็นอีกภาษานั้นรวดเร็วขึ้นมาก จริงๆแล้วนักพัฒนาสามารถโค้ดเป็นอีกภาษาหนึ่ง แล้วแปลเป็นอีกภาษาหนึ่งได้โดยอัตโนมัติ โดยที่ไม่ต้องทำอะไรเพิ่มเติมเลย +เครื่องมือสมัยใหม่ทำให้การแปลงภาษาเป็น JavaScript เร็วและโปร่งใสมากขึ้น จริงๆ แล้วผู้พัฒนาสามารถเขียนโปรแกรมด้วยภาษาอื่นแล้วแปลงโดยอัตโนมัติได้ -ตัวอย่างภาษาเหล่านั้นได้แก่: +ตัวอย่างของภาษาเหล่านี้: -- [CoffeeScript](http://coffeescript.org/) เป็นภาษาที่ดีไซน์์เพื่อให้อ่านง่าย เป็นที่นิยมในหมู่นักพัฒนาภาษารูบี้ (Ruby) -- [TypeScript](http://www.typescriptlang.org/) เป็นภาษาที่เพิ่มความเข้มงวดเรื่องชนิดข้อมูล (data typing) เพื่อลดความยุ่งยากในการพัฒนา และสนับสนุนระบบที่ซับซ้อน พัฒนาโดยไมโครซอฟท์ (Microsoft) -- [Flow](http://flow.org/) เป็นภาษาเพิ่มความเข้มงวดเรื่องชนิดข้อมูล พัฒนาโดยเฟสบุ๊ค (Facebook) -- [Dart](https://www.dartlang.org/) เป็นภาษาสแตนด์อโลน (standalone) ที่มีเอนจินของตัวเอง ทำงานบน environment ที่ไม่ใช่เบราเซอร์ (อย่างเช่น มือถือ) แต่สามารถแปลงสู่จาวาสคริปต์ได้ พัฒนาโดยกูเกิ้ล (Google) -- [Brython](https://brython.info/) เป็นตัวแปลภาษาจากไพธอน (Python) เป็นจาวาสคริปต์ ทำให้เขียนเว็บแอพฯจากภาษาไพธอนล้วนๆได้ -- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) เป็นภาษายุคใหม่ที่สั้น กระชับ และปลอกภัย เราสามารถใช้ภาษานี้ เขียนโปรแกรมให้ทำงานทั้งเบราเซอร์และ Node ได้เช่นเดียวกับจาวาสคริปต์ +- [CoffeeScript](https://coffeescript.org/) เป็น "syntactic sugar" สำหรับภาษา JavaScript โดยมีไวยากรณ์ที่สั้นลงเพื่อเขียนโค้ดอย่างชัดเจนและแม่นยำขึ้น โดยทั่วไปแล้วนักพัฒนาที่เขียน Ruby จะชื่นชอบ +- [TypeScript](https://www.typescriptlang.org/) มุ่งเน้นการเพิ่ม "strict data typing" เพื่อให้ง่ายต่อการพัฒนาและการดูแลระบบที่ซับซ้อน ซึ่งถูกพัฒนาโดย Microsoft +- [Flow](https://flow.org/) ก็เพิ่ม data typing แต่ด้วยวิธีที่แตกต่างกันกับ TypeScript ซึ่งถูกพัฒนาโดย Facebook +- [Dart](https://www.dartlang.org/) เป็นภาษาที่สามารถทำงานได้เองโดยมีเครื่องมือของตัวเองที่รันใน environment ที่ไม่ใช่ browser (เช่นแอปพลิเคชันมือถือ) แต่ยังสามารถแปลงเป็นภาษา JavaScript ได้ ซึ่งถูกพัฒนาโดย Google +- [Brython](https://brython.info/) เป็น Python transpiler ที่แปลงภาษา Python เป็นภาษา JavaScript ซึ่งช่วยให้เขียนแอปพลิเคชันด้วยภาษา Python เป็นไปได้โดยไม่ต้องใช้ JavaScript +- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) เป็นภาษาโปรแกรมที่สมัยใหม่ กระชับ และปลอดภัย สามารถทำงานใน browser หรือ Node ได้ -ยังมีภาษาอื่นๆที่ไม่ได้อยู่ในตัวอย่างนี้อีก แต่แน่นอนว่าหลายๆคนไม่ค่อยได้เขียนจาวาสคริปต์ตรงๆอีกแล้ว แต่เขียนเป็นภาษาที่แปลเป็นจาวาสคริปต์อีกทีแทน แต่รู้จักกับจาวาสคริปต์จะช่วยให้เราเข้าใจภาษาที่เราเขียนอยู่ได้ดียิ่งขึ้น +ยังมีภาษาอื่นๆอีกมากมาย แน่นอนว่าถึงแม้เราจะใช้ภาษาที่ถูกแปลงไปเป็น JavaScript แต่เรายังควรรู้จัก JavaScript จริงจังเพื่อเข้าใจและใช้งานได้อย่างมีประสิทธิภาพ ## สรุป -- เริ่มแรกจาวาสคริปตถูกสร้างขึ้นเป็นภาษาสำหรับเบราว์เซอร์เท่านั้น แต่ปัจจุบันก็ใช้ในสภาพแวดล้อมอื่นๆ ด้วยเช่นกัน -- ปัจจุบันจาวาสคริปต์มีจุดยืนที่ไม่เหมือนใครในฐานะที่เป็นภาษาเบราว์เซอร์ที่ได้รับการยอมรับอย่างกว้างขวางที่สุด ทำงานร่วมกับ HTML/CSS ได้อย่างสมบูรณ์ -- มีหลายภาษาที่สามารถ "แปลง" เป็นจาวาสคริปต์ได้ พร้อมกับความสามารถที่มากกว่าจาวาสคริปต์เดิม แต่ขอแนะนำให้ศึกษาภาษาเหล่านี้หลังจากเชี่ยวชาญจาวาสคริปต์แล้ว +- เป็นภาษาที่สร้างขึ้นเพื่อใช้ในเบราเซอร์เท่านั้น แต่ปัจจุบันมีการใช้งานในสภาพแวดล้อมอื่นๆอีกมากมาย +- ในปัจจุบัน JavaScript มีตำแหน่งเด่นเป็นภาษาบน browser ที่มีการนำมาใช้งานอย่างแพร่หลายและผสมผสานได้อย่างเต็มรูปแบบกับ HTML/CSS +- มีภาษาหลายภาษาที่ถูกแปลงไปเป็น JavaScript และให้คุณสมบัติเฉพาะต่างๆ แนะนำให้ลองกันสักนิดแต่หลังจากฝึก JavaScript จนชำนาญแล้วนะ