แนะนำภาษา JavaScript

ในบทแรกของบทเรียนนี้ คุณจะได้เรียนรู้เกี่ยวกับภาษา JavaScript เราจะพูดถึงประวัติความเป็นมา วิวัฒนาการของภาษา รวมถึงทำความรู้จักกับ JavaScript engine ที่ใช้สำหรับรันโปรแกรมภาษา JavaScript ที่เราเขียนขึ้น และสุดท้ายพูดถึงเครื่องมือที่ใช้สำหรับเขียนโปรแกรมในภาษา JavaScript

ภาษา JavaScript คืออะไร

ภาษา JavaScript หรือย่อ JS เป็นภาษาเขียนโปรแกรมที่ถูกพัฒนาและปฏิบัติตามข้อกำหนดมาตรฐานของ ECMAScript; ภาษา JavaScript นั้นเป็นภาษาระดับสูง คอมไพล์ในขณะที่โปรแกรมรัน (JIT) และเป็นภาษาเขียนโปรแกรมแบบหลายกระบวนทัศน์ เช่น การเขียนโปรแกรมเชิงขั้นตอน การเขียนโปรแกรมเชิงวัตถุ หรือการเขียนโปรแกรมแบบ Functional; ภาษา JavaScript มีไวยากรณ์ที่เหมือนกับภาษา C ใช้วงเล็บเพื่อกำหนดบล็อคของคำสั่ง นอกจากนี้ JavaScript ยังเป็นภาษาที่มีประเภทข้อมูลแบบไดนามิกส์ เป็นภาษาแบบ Prototype-based และ First-class function

ภาษา JavaScript นั้นถือว่าเป็นเทคโนโลยีหลักของการพัฒนาเว็บไซต์ (World Wide Web) มันทำให้หน้าเว็บสามารถตอบโต้กับผู้ใช้ได้โดยที่ไม่จำเป็นต้องรีเฟรชหน้าใหม่ (Dynamic website) เว็บไซต์จำนวนมากใช้ภาษา JavaScript สำหรับควบคุมการทำงานที่ฝั่ง Client-side นั่นทำให้เว็บเบราว์เซอร์ต่างๆ มี JavaScript engine ที่ใช้สำหรับประมวลผลสคริปของภาษา JavaScript ที่รันบนเว็บเบราว์เซอร์

เนื่องจากภาษา JavaScript เป็นภาษาเขียนโปรแกรมแบบหลายกระบวนทัศน์ ทำให้มันรองรับการเขียนโปรแกรมทั้งแบบ Event-driven, Functional และแบบลำดับขั้นตอน มันมีไลบรารี่ (APIs) สำหรับทำงานกับข้อความ วันที่ Regular expression และโครงสร้างข้อมูลพื้นฐานอย่าง Array และ Map หรือแม้กระทั่ง Document Object Model (DOM) ซึ่งเป็น API ที่โดยทั่วไปแล้วสามารถได้บนเว็บเบราว์เซอร์

อย่างไรก็ตาม ตัวของภาษา JavaScript เองไม่ได้มีฟังก์ชันสำหรับอินพุต/เอาต์พุต (I/O) ที่มากับภาษา เช่น ฟังก์ชันเกี่ยวกับ Network การงานกับไฟล์ หรือไลบรารี่เกี่ยวกับกราฟิก โดยทั่วไปแล้วสิ่งเหล่านี้จะถูกให้มาโดย Host environment (สภาพแวดล้อมที่ใช้รันภาษา JavaScript) เช่น เว็บเบราว์เซอร์ หรือ Node.js) ซึ่งจะแตกต่างกันออกไป ยกตัวอย่างเช่น การรับค่าในเว็บเบราว์เซอร์จะผ่านฟังก์ชัน prompt ซึ่งเป็นส่วนหนึ่งของ Browser Object Model (BOM) หรือรับค่าจาก HTML ฟอร์มซึ่งเป็นส่วนหนึ่งของ Document Object Model (DOM) ขณะที่บน Node.js เราสามารถรับค่าได้จาก Input/Output Stream ของ Command line

ถึงแม้ว่ามันจะมีความคล้ายคลึงกันระหว่างภาษา Java และ JavaScript เช่น ชื่อของภาษา ไวยากรณ์ หรือไลบรารี่มาตรฐานต่างๆ อย่างไรก็ตาม ทั้งสองภาษาแตกต่างกันอย่างสิ้นเชิงในแง่ของการออกแบบ ภาษา Java เป็นภาษาที่มีประเภทข้อมูลแบบคงที่ (Static-typing) ในขณะที่ภาษา JavaScript มีประเภทข้อมูลแบบไดนามิกส์ (Dynamic-typing) ภาษา Java ถูกคอมไพล์เป็น Byte-code ก่อนที่จะรัน ในขณะที่ภาษา JavaScript จะคอมไฟล์ในตอนที่โปรแกรมรัน ภาษา Java เป็นภาษาแบบ Class-based ในขณะที่ภาษา JavaScript เป็นภาษาแบบ Prototype-based

ประวัติความเป็นมาของภาษา JavaScript

ภาษา JavaScript ถูกออกแบบและสร้างโดย Brendan Eich สำหรับเป็นภาษาสคริปที่ทำงานบนเว็บเบราว์เซอร์ Navigator ที่เป็นผลิตภัณฑ์ของบริษัท Netscape เพื่อทำให้หน้าเว็บที่ในตอนแรกนั้นเป็นแบบ Static สามารถตอบโต้กับผู้ใช้ได้โดยที่ไม่จำเป็นต้องรีเฟรชหน้าใหม่ (Dynamic) เช่น การส่งข้อมูลเบื้องหลังไปยัง Server และรอรับผลตอบกลับมาด้วย AJAX; ภาษา JavaScript ได้ถูกเปิดตัวและเป็นส่วนหนึ่งของเว็บเบราว์เซอร์ Navigator ในเดือนกันยายน 1995 โดยใช้ชื่อว่า LiveScript และได้เปลี่ยนเป็น JavaScript ในอีกสามเดือนต่อมา

Brendan Eich ผู้สร้างภาษา JavaScript

ในเดือนพฤศจิกายน 1996 Netscape ได้ส่งภาษา JavaScript ไปยัง ECMA International เพื่อเป็นจุดเริ่มต้นสำหรับกำหนดมาตรฐานให้ทุกเว็บเบราว์เซอร์ปฏิบัติตามมาตรฐานดังกล่าว เพื่อให้การพัฒนา JavaScript engine เป็นไปในทิศทางเดียวกัน นั่นให้เกิดการเปิดตัวอย่างเป็นทางการสำหรับข้อกำหนดมาตรฐาน ECMAScript ในเดือนมิถุนายน 1997 ในช่วงเวลาหลังจากนี้ บริษัทต่างๆ ที่พัฒนาเว็บเบราว์เซอร์ต่างก็ยังพัฒนา JavaScript engine ไม่เป็นไปในทิศทางเดียวกันมากนัก นั่นทำให้นักพัฒนาเว็บต้องเขียนโค้ดหลายเวอร์ชันเพื่อให้ทำงานได้ในทุกเว็บเบราว์เซอร์

จนกระทั่งในเดืิอนกรกฎาคม 2008 ได้มีการจัดการประชุมขึ้นที่ Oslo จากองกรณ์และฝ่ายต่างๆ ที่พัฒนา JavaScript engine ทำให้เกิดข้อตกลงขึ้นในต้นปี 2009 เพื่อรวบรวมงานที่เกี่ยวข้องทั้งหมดของภาษา JavaScript และผลักดันภาษาให้เดินไปข้างหน้า นั่นทำให้เกิดข้อกำหนดมาตรฐาน ECMAScript เวอร์ชันที่ 5 (ES5) ออกมาในเดือนธันวาคม 2009 และก่อนหน้านี้ในปี 2008 Google ได้เปิดตัวเว็บเบราว์เซอร์ Chrome ที่มาพร้อมกับ V8 JavaScript engine ที่มีแนวคิดในการพัฒนาแบบคอมไพล์ในตอนที่โปรแกรมรัน (Just-in-time compilation: JIT) ซึ่งมันทำงานได้เร็วกว่ามาก นั่นทำให้ผู้พัฒนาเบราว์เซอร์อื่นๆ ต้องปรับปรุง JavaScript engine ของพวกเขาให้ทำงานในรูปแบบ JIT

หลังจากที่พัฒนาต่อเนื่องมาอีกหลายปี ในปี 2015 ได้มีการเพิ่มคุณสมบัติใหม่ๆ ที่หลากหลายเข้ามา ซึ่งถือว่าเป็นการเปลี่ยนแปลงครั้งสำคัญ และทำให้เกิดข้อกำหนดมาตรฐาน ECMAScript 2015 หรือเวอร์ชันที่ 6 (ES6) จนกระทั่งในปี 2015 ตอนนี้ดูเหมือนว่าภาษา JavaScript จะพัฒนามาจนถึงที่สุดแล้ว ทำให้ระหว่างปี 2016 - 2019 เวอร์ชันใหม่ของ ECMAScript ที่ถูกเผยแพร่ออกมาในแต่ละปีมีการเปลี่ยนแปลงและเพิ่มคุณสมบัติเพียงเล็กน้อยเท่านั้น

คุณสมบัติของภาษา JavaScript

ECMAScript 2015 (ES6) เป็นภาษา JavaScript ที่ถือว่าพัฒนามาจนถึงจุดสูงสุดแล้วก็ว่าได้ มันถูกเผยแพร่ในเดือนมิถุนายน 2015 ซึ่งในเวอร์ชันนี้ ได้เพิ่มไวยากรณ์ใหม่ของภาษามากมาย เช่น การสร้างคลาสด้วยคำส่ัง class การสร้างโมดูลและใช้งานมันด้วยคำสั่ง import และ export และคำสั่งสำหรับประกาศตัวแปร let และประกาศค่าคงที่ const ซึ่งทำให้ตัวแปรสามารถมีขอบเขตในบล็อคที่มันถูกสร้างขึ้นได้ และสิ่งอื่นๆ ที่ถูกเพิ่มเข้ามาเป็นจำนวนมาก เช่น Map, Set, WeakMap, Promise, Reflection, Proxies, Template string และอื่นๆ

ในเดือนมิถุนายน 2016 ได้มีการเปิดตัวเวอร์ชัน 7 หรือ ECMAScript 2016 (ES7) ได้มีการเพิ่มตัวดำเนินการยกกำลัง ** (ที่ก่อนหน้านี้เราจะใช้ผ่านฟังก์ชัน Math.pow) คำสั่ง await async สำหรับการเขียนโปรแกรมที่ทำงานไม่พร้อมกัน และฟังก์ชัน includes ของอาเรย์ และในปัจจุบัน ภาษา JavaScript ถูกพัฒนามาจนถึง ECMAScript 2020 (ES11) ซึ่งมีการเปลี่ยนแปลงที่เพิ่มขึ้นไม่มากนักหลังจาก ES7

JavaScript engine คืออะไร

JavaScript engine คือโปรแกรมคอมพิวเตอร์ทีใช้สำหรับประมวลผลโค้ดของภาษ JavaScript ซึ่ง JavaScript engine ในช่วงเริ่มต้นเป็นเพียงแค่ตัวแปรภาษา (Interpreter) เท่านั้น แต่ในปัจจุบันได้มีการพัฒนามาให้อยู่ในรูปแบบของคอมไพเลอร์ที่มีการคอมไพล์ในตอนที่โปรแกรมรัน (Just-in-time compilation: JIT) เพื่อเพิ่มประสิทธิภาพการทำงานของโปรแกรม โดยทั่วไปแล้ว JavaScript engine จะถูกพัฒนาโดยผู้พัฒนาเว็บเบราว์เซอร์ที่ปฏิบัติตามข้อกำหนดมาตรฐานของ ECMAScript

V8 JavaScript engine ที่พัฒนาโดย Google

ในปัจจุบัน V8 JavaScript engine ที่พัฒนาโดย Google นั้นเป็น engine ที่ได้รับความนิยมมากที่สุด มันเป็น JavaScript engine ที่ถูกใช้งานบนเว็บเบราว์เซอร์ Chrome รวมถึง Node.js อย่างไรก็ตาม เว็บเบราว์เซอร์อื่นก็มี JavaScript engine เป็นของตัวเอง เช่น Mozilla Firefox มี SpiderMonkey engine และถึงแม้แต่ละเว็บเบราว์เซอร์จะมี JavaScript engine ของตัวเอง แต่ทั้งหมดนั้นพัฒนาขึ้นตามข้อกำหนดมาตรฐานของ ECMAScript นั่นทำให้เราสามารถเขียนโปรแกรมภาษา JavaScript และรันได้ทุกสภาพแวกล้อมการทำงาน ไม่ว่าจะเป็นเว็บเบราว์เซอร์อย่าง Chrome หรือ Firefox หรือบน Node.js

การเขียนโปรแกรมในภาษา JavaScript

ในตอนแรกนั้นภาษา JavaScript ถูกพัฒนาขึ้นมาสำหรับเป็นภาษาสคริปเพื่อทำงานบนหน้าเว็บเพจที่รันบนเว็บเบราว์เซอร์เท่านั้น แต่ในปัจจุบัน ได้มีการพัฒนาสภาพแวดการทำงานต่างๆ ขึ้นมา นั่นทำให้เราสามารถเขียนโปรแกรมภาษา JavaScript ไม่ใช่เพื่อสำหรับจัดการหน้าเว็บอีกต่อไป ยกตัวอย่างเช่น

Console application: เราสามารถเขียนโปรแกรมภาษา JavaScript เพื่อวัตถุประสงค์ทั่วไปโดยรันบน Command Line ได้ โดยโปรแกรมประเภทนี้มักจะถูกเขียนและนำไปรันบนเว็บ Server เราสามารถเขียนภาษา JavaScript แบบ Command Line ได้โดยการใช้ Node.js เป็น Host environment ซึ่งนี่เป็นวิธีที่เราจะทำในบทเรียนของเรา

การพัฒนาโปรแกรม Desktop: เฟรมเวิร์กอย่าง Electron ทำให้เราสามารถเขียนโปรแกรม GUI บน Desktop ได้โดยการรวมการทำงาน V8 engine และ Node.js เข้าด้วยกัน

การพัฒนาแอปพลิเคชันมือถือ: Apache Cordova เป็นเฟรมเวิร์กสำหรับพัฒนาแอปพลิเคชันบนมือถือที่ให้เราสามารถพัฒนาเว็บไซต์แบบ Hybrid โดยการใช้ CSS3, HTML5 และ JavaScript และนำไปรันได้ทั้งบน Android, iOS หรือ Windows Phone

เครื่องมือพัฒนาโปรแกรมภาษา JavaScript

Host environment: เพื่อทำให้โปรแกรมภาษา JavaScript สามารถทำงานได้ เราต้องการ Host environment ซึ่งเป็นสถานที่ที่โปรแกรมภาษา JavaScript ของเราจะถูกรันโดย JavaScript engine ยกตัวอย่างเช่น ถ้าหากคุณเขียนภาษา JavaScript เพื่อรันบนเว็บเบราว์เซอร์ คุณจะต้องดาวน์โหลดเบราว์เซอร์ เช่น Chrome หรือ Firefox เพื่อรันมันในหน้าเว็บ ถ้าหากคุณต้องการเขียนโปรแกรม Command Line เราจำเป็นต้องติดตั้ง Node.js เพื่อรันมัน

Integrated development environment (IDE): สุดท้ายที่เราต้องมี Text editor หรือ IDE สำหรับเขียนโค้ด คุณสามารถใช้โปรแกรมอะไรก็ได้ที่ต้องการ ยกตัวอย่างเช่น Notepad บน Windows หรือ XCode บน Mac อย่างไรก็ตาม ในบทเรียนนี้ เราจะใช้ Visual Studio Code ซึ่งเป็น IDE ที่พัฒนาโดย Microsoft และได้รับความนิยมมากที่สุดในตอนนี้

ในบทนี้ เราได้แนะนำให้คุณรู้จักกับภาษา JavaScript และประวัติความเป็นมาของมัน ภาษา JavaScript นั้นถูกพัฒนาขึ้นตามข้อกำหนดมาตรฐานของ ECMAScript และเพื่อให้เว็บเบราวน์เซอร์ต่างๆ นำไปพัฒนา JavaScript engine เพื่อให้การทำงานเป็นไปในทิศทางเดียวกัน ในบทต่อไป จะเป็นการติดตั้งเครื่องมือทีจำเป็นเพื่อเตรียมพร้อมสำหรับการเขียนโปรแกรมภาษา JavaScript