JavaScript เป็นภาษาการเขียนโปรแกรมระดับสูงที่ถูกตีความ ซึ่งใช้หลักๆ ในการสร้างแอปพลิเคชันเว็บที่มีการโต้ตอบและมีพลศาสตร์ มันเป็นส่วนสำคัญของการพัฒนาเว็บ ร่วมกับ HTML และ CSS โดยเริ่มต้นพัฒนาโดย Brendan Eich ขณะทำงานที่ Netscape JavaScript ได้พัฒนาเป็นภาษาที่หลากหลายซึ่งรองรับสไตล์การเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ ฟังก์ชัน และการเขียนโปรแกรมเชิงชี้นำ ปัจจุบันมันเป็นส่วนสำคัญของเทคโนโลยีเว็บ โดยมีระบบนิเวศที่กว้างขวางซึ่งรวมถึงเฟรมเวิร์ก ไลบรารี และสภาพแวดล้อมการทำงานมากมาย โดยเฉพาะ Node.js
JavaScript ถูกสร้างขึ้นในปี 1995 โดยมีชื่อว่า Mocha ต่อมาเปลี่ยนชื่อเป็น LiveScript และสุดท้ายเป็น JavaScript เพื่อใช้ประโยชน์จากความนิยมของ Java เวอร์ชันแรกถูกปล่อยออกมาใน Netscape Navigator 2.0 ซึ่งอนุญาตให้นักพัฒนาสามารถเพิ่มเนื้อหาที่มีพลศาสตร์ลงในหน้าเว็บ ภาษาได้รับการมาตรฐานภายใต้สมาคมผู้ผลิตคอมพิวเตอร์ยุโรป (ECMA) เป็น ECMAScript ในปี 1997 โดยมีเวอร์ชันถัดไปที่แนะนำฟีเจอร์สำคัญที่ขยายความสามารถของมัน
การพัฒนาของ JavaScript รวมถึงการแนะนำฟีเจอร์เช่น การเขียนโปรแกรมเชิงวัตถุและการเขียนโปรแกรมแบบอะซิงโครนัส (พรอมิสและคอลแบ็ก) โดยเฉพาะ ECMAScript 5 (2009) ได้แนะนำ “โหมดเข้มงวด” การสนับสนุน JSON และวิธีการจัดการอาร์เรย์ที่ดีขึ้น ในขณะที่ ECMAScript 6 (2015) หรือที่รู้จักกันในชื่อ ES6 หรือ ECMAScript 2015 ได้มีการเปลี่ยนแปลงที่สำคัญ เช่น ฟังก์ชันลูกศร คลาส และโมดูล การปล่อย ES6 ถือเป็นการเปลี่ยนแปลงพาราไดม์ เนื่องจากทำให้ JavaScript เป็นภาษาที่แข็งแกร่งขึ้นซึ่งเหมาะสำหรับการพัฒนาแอปพลิเคชันขนาดใหญ่
ปัจจุบัน JavaScript มีอยู่ทั่วไปในด้านการพัฒนาเว็บ โดยขับเคลื่อนเฟรมเวิร์กด้านหน้าเช่น React, Angular และ Vue.js รวมถึงการพัฒนาด้านหลังผ่าน Node.js ภาษาได้พัฒนาต่อไปด้วยการปล่อย ECMAScript ประจำปี โดยแนะนำฟีเจอร์และการปรับปรุงใหม่ๆ ด้วยการใช้ JavaScript ที่เพิ่มขึ้นในการพัฒนาแอปพลิเคชันมือถือ แอปพลิเคชันเดสก์ท็อป (โดยใช้ Electron) และแม้แต่แอปพลิเคชันระดับองค์กร ความเกี่ยวข้องและความสำคัญของมันในภูมิทัศน์การพัฒนาซอฟต์แวร์ยังคงแข็งแกร่ง
JavaScript เป็นภาษาที่มีการกำหนดประเภทแบบพลศาสตร์ ซึ่งอนุญาตให้ตัวแปรเก็บค่าของประเภทใดก็ได้โดยไม่ต้องประกาศประเภทอย่างชัดเจน
let example = "Hello, World!";
example = 42; // ไม่มีข้อผิดพลาด example สามารถเปลี่ยนประเภทได้
ฟังก์ชันใน JavaScript เป็นพลเมืองระดับหนึ่ง ซึ่งหมายความว่ามันสามารถถูกกำหนดให้กับตัวแปร ถูกส่งเป็นอาร์กิวเมนต์ และถูกส่งคืนจากฟังก์ชันอื่นๆ
const greet = function(name) {
return `Hello, ${name}`;
};
console.log(greet("Alice")); // ผลลัพธ์: Hello, Alice
ฟังก์ชันลูกศรถูกแนะนำใน ES6 โดยให้ไวยากรณ์ที่กระชับมากขึ้นสำหรับการเขียนฟังก์ชันและไม่ผูกพัน this
ของตัวเอง
const add = (a, b) => a + b;
console.log(add(2, 3)); // ผลลัพธ์: 5
พรอมิสช่วยให้การเขียนโปรแกรมแบบอะซิงโครนัสง่ายขึ้นโดยการแทนค่าที่อาจมีในอนาคต
const fetchData = () => {
return new Promise((resolve, reject) => {
// จำลองการเรียก API
setTimeout(() => resolve("Data received!"), 1000);
});
};
fetchData().then(data => console.log(data)); // ผลลัพธ์หลังจาก 1 วินาที: Data received!
เทมเพลตลิเทอรัลช่วยให้การแทรกสตริงและสตริงหลายบรรทัดทำได้ง่าย
const name = "Alice";
const greeting = `Hello, ${name}!`;
console.log(greeting); // ผลลัพธ์: Hello, Alice!
การกำหนดค่าที่แยกออกช่วยให้การดึงค่าจากอาร์เรย์หรือคุณสมบัติจากวัตถุทำได้ง่ายขึ้น
const person = { name: "Alice", age: 25 };
const { name, age } = person;
console.log(name, age); // ผลลัพธ์: Alice 25
ตัวดำเนินการ spread (...
) ช่วยให้สามารถขยายองค์ประกอบจาก iterable ในขณะที่ตัวดำเนินการ rest รวบรวมองค์ประกอบที่เหลือเข้าเป็นอาร์เรย์
const numbers = [1, 2, 3];
const moreNumbers = [...numbers, 4, 5]; // ผลลัพธ์: [1, 2, 3, 4, 5]
const sum = (...args) => args.reduce((a, b) => a + b, 0);
console.log(sum(1, 2, 3)); // ผลลัพธ์: 6
JavaScript รองรับการเขียนโปรแกรมเชิงวัตถุแบบคลาสด้วยไวยากรณ์ class
ที่แนะนำใน ES6
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
const dog = new Animal("Dog");
dog.speak(); // ผลลัพธ์: Dog makes a noise.
JavaScript รองรับการเขียนโปรแกรมแบบโมดูลผ่านโมดูล ES6 ที่ใช้คำสำคัญ import
และ export
// module.js
export const name = "Alice";
export function greet() {
console.log("Hello!");
}
// main.js
import { name, greet } from './module.js';
console.log(name); // ผลลัพธ์: Alice
greet(); // ผลลัพธ์: Hello!
ไวยากรณ์ async/await ช่วยให้การทำงานกับพรอมิสง่ายขึ้น ทำให้โค้ดอะซิงโครนัสดูเหมือนโค้ดซิงโครนัสมากขึ้น
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
};
fetchData().then(data => console.log(data));
JavaScript ทำงานในสภาพแวดล้อมต่างๆ โดยมีเอนจินเบราว์เซอร์เช่น V8 (Chrome) และ SpiderMonkey (Firefox) เป็นที่เด่นชัดที่สุด Node.js ช่วยให้ JavaScript สามารถทำงานบนฝั่งเซิร์ฟเวอร์ได้ ทำให้นักพัฒนาสามารถสร้างแอปพลิเคชันเว็บที่สมบูรณ์ด้วยภาษาที่เป็นเอกภาพทั้งในฝั่งลูกค้าและเซิร์ฟเวอร์
IDE และโปรแกรมแก้ไขโค้ดที่ใช้กันทั่วไปสำหรับ JavaScript ได้แก่ Visual Studio Code, WebStorm, Atom และ Sublime Text เครื่องมือเหล่านี้มีฟีเจอร์เช่น การเน้นไวยากรณ์ การเติมโค้ดอัจฉริยะ และการสนับสนุนการดีบัก
ในการตั้งค่าโปรเจกต์ JavaScript นักพัฒนามักใช้ตัวจัดการแพ็กเกจเช่น npm หรือ yarn เพื่อจัดการการพึ่งพา โครงสร้างโปรเจกต์ทั่วไปประกอบด้วยไฟล์ index.html
สำหรับส่วนติดต่อผู้ใช้บนเว็บ ไฟล์ JavaScript หลัก (มักจะเป็น main.js
) และอาจมีไฟล์ package.json
สำหรับการจัดการแพ็กเกจ
npm init -y # เริ่มต้นโปรเจกต์ JavaScript ใหม่ด้วยการตั้งค่าเริ่มต้น
npm install express # ติดตั้งเฟรมเวิร์ก Express
JavaScript ถูกใช้ในแอปพลิเคชันมากมาย รวมถึง:
คู่แข่งหลักและทางเลือกของ JavaScript ได้แก่:
แต่ละภาษามีจุดแข็งและจุดอ่อนของตัวเองขึ้นอยู่กับความต้องการเฉพาะของโปรเจกต์หรือแอปพลิเคชัน
สำหรับการแปลโค้ด JavaScript ไปยังภาษาอื่นหรือในทางกลับกัน สามารถใช้เครื่องมือเช่น Babel (สำหรับการแปลง JavaScript รุ่นใหม่ไปยังรุ่นเก่า) หรือ TypeScript (สำหรับการตรวจสอบประเภทและการแปลงเป็น JavaScript) ไลบรารีเช่น jQuery ยังสามารถช่วยในการจัดการ DOM ข้ามสภาพแวดล้อมต่างๆ โดยให้ API ที่สอดคล้องกัน
นอกจาก Babel และ TypeScript แล้ว ยังมีเครื่องมืออื่นๆ ที่สามารถช่วยในการแปลหรือแปลงโค้ด JavaScript: