พื้นฐานของจาวาสคริปต์
บทความนี้อธิบายพื้นฐานของจาวาสคริปต์
YouTube Video
การรัน Hello World!
ภาพรวมของจาวาสคริปต์
จาวาสคริปต์เป็นหนึ่งในภาษาการเขียนโปรแกรมที่ใช้กันมากที่สุดในวงการพัฒนาเว็บไซต์ โดยหลักจะใช้ในการเพิ่มองค์ประกอบที่มีการโต้ตอบให้กับเว็บเพจ ช่วยให้สามารถจัดการกับอินเทอร์เฟซผู้ใช้, ส่งผ่านข้อมูล และสร้างภาพเคลื่อนไหว สามารถทำงานได้ทั้งฝั่งลูกข่าย (ในเบราว์เซอร์) และฝั่งเซิร์ฟเวอร์โดยใช้เทคโนโลยีเช่น Node.js ด้วยความเรียบง่ายและความยืดหยุ่นของมัน ทำให้มือใหม่สามารถเรียนรู้ได้ง่าย และเป็นที่นิยมในหมู่นักพัฒนามืออาชีพ
ตัวแปรในภาษา JavaScript
ตัวแปรในภาษา JavaScript เปรียบเสมือนภาชนะสำหรับเก็บและใช้ข้อมูลซ้ำ โดยการใช้ตัวแปร คุณสามารถจัดเก็บและจัดการค่าภายในโปรแกรมของคุณได้
การประกาศตัวแปร
ในภาษา JavaScript มีคีย์เวิร์ดสามตัวสำหรับการประกาศตัวแปร
var
: วิธีเก่าที่ใช้ในการประกาศตัวแปร แต่การจัดการขอบเขต (scope) มีความซับซ้อนและต้องระมัดระวัง มันทำงานโดยพึ่งพาขอบเขตของฟังก์ชัน (function scope)
1var x = 10;
let
: นำมาใช้ใน ES6 เป็นวิธีการประกาศตัวแปรที่มีขอบเขตภายในบล็อก (block scope) สามารถกำหนดค่าใหม่ได้ แต่ไม่สามารถประกาศตัวแปรซ้ำในขอบเขตเดียวกันได้
1let y = 20;
const
: ใช้ในการประกาศตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าได้ (ค่าคงที่) มีช่วงขอบเขตของบล็อกและไม่สามารถกำหนดค่าใหม่หรือประกาศซ้ำได้หลังจากที่ประกาศแล้ว
1const z = 30;
ขอบเขต
ตัวแปรมีแนวคิดของขอบเขตการใช้งาน
ขอบเขตระดับโลก
1var globalVar = 'This is global'; // Global scope
2
3function accessGlobal() {
4 console.log(globalVar); // Able to access global variable
5}
6
7accessGlobal(); // Outputs "This is global"
- ตัวแปรใน ขอบเขตระดับโลก สามารถเข้าถึงได้จากทุกที่ ตัวแปรที่ประกาศด้วย
var
มีขอบเขตระดับโลกหรือฟังก์ชัน แต่let
และconst
มีขอบเขตของบล็อก
ขอบเขตของบล็อก
1if (true) {
2 let localVar = "This is a block-scoped variable";
3
4 // Accessible inside the brackets
5 console.log(localVar);
6}
7
8// Error: localVar cannot be used outside of this scope
9console.log(localVar);
-
ขอบเขตของบล็อก: ตัวแปรที่ประกาศด้วย
let
หรือconst
ใช้งานได้เฉพาะภายใน{}
(วงเล็บปีกกา) -
เกิดข้อผิดพลาดเมื่อพยายามเข้าถึงจากภายนอก
{}
(วงเล็บปีกกา)
ขอบเขตของฟังก์ชัน
1function myFunction() {
2 var functionScoped = 'This is function scope';
3 // Accessible inside the function
4 console.log(functionScoped);
5
6 if (true) {
7 var functionVar = 'This is also function scope';
8 }
9 // functionVar can be used inside of the fucntion
10 console.log(functionVar);
11}
12
13myFunction(); // Outputs "This is function scope"
14
15// Error: functionScoped is not defined
16console.log(functionScoped);
-
ขอบเขตของฟังก์ชัน: ตัวแปรและฟังก์ชันที่ถูกกำหนดภายในฟังก์ชัน ไม่สามารถเข้าถึงได้จากภายนอกฟังก์ชัน ตัวแปรที่ประกาศภายในฟังก์ชันด้วย
var
จะอยู่ในขอบเขตนี้ -
ในตัวอย่างนี้ ตัวแปร
functionVar
สามารถเข้าถึงได้จากภายนอก{}
(วงเล็บปีกกา) ตราบใดที่ยังอยู่ในขอบเขตของฟังก์ชัน ในทางกลับกัน การเข้าถึงตัวแปรfunctionScoped
จากภายนอกขอบเขตของฟังก์ชันจะส่งผลให้เกิดข้อผิดพลาด
ดังนั้นตัวแปรที่ประกาศด้วย var มีขอบเขตเฉพาะฟังก์ชันและไม่มีขอบเขตของบล็อก จึงมีความเสี่ยงที่จะถูกใช้งานในช่วงที่ไม่คาดคิด แนะนำให้ใช้ const สำหรับตัวแปรที่ไม่เปลี่ยนแปลงค่า และควรใช้ let เป็นหลัก เพื่อหลีกเลี่ยงการใช้ var เท่าที่จะเป็นไปได้
ประเภทข้อมูล
ตัวแปรใน JavaScript สามารถเก็บค่าที่มีประเภทข้อมูลหลากหลายได้ มี string
สำหรับจัดการข้อความ และ number
สำหรับจัดการค่าตัวเลข
ประเภทข้อมูลหลักมีดังนี้:
1// Number: Numeric type (integer and floating point number)
2let integerNumber = 42;
3let floatNumber = 3.14;
4console.log("Number (Integer):", integerNumber);
5console.log("Number (Float):", floatNumber);
6
7// String: String type
8let text = "Hello, JavaScript!";
9console.log("String:", text);
10
11// Boolean: Boolean type (true or false)
12let isJavaScriptFun = true;
13let isError = false;
14console.log("Boolean (true):", isJavaScriptFun);
15console.log("Boolean (false):", isError);
16
17// Null: Explicitly represents "nothing"
18let emptyValue = null;
19console.log("Null:", emptyValue);
20
21// Undefined: The default value assigned to an uninitialized variable
22let notDefined;
23console.log("Undefined:", notDefined);
24
25// Symbol: A data type for creating unique values
26let uniqueKey = Symbol("id");
27console.log("Symbol:", uniqueKey);
- ประเภทข้อมูลพื้นฐาน:
number
: จัดการค่าตัวเลข (จำนวนเต็มและจำนวนทศนิยม)string
: จัดการข้อความหรือสายอักขระboolean
: ใช้จัดการค่าบูลีนtrue
หรือfalse
null
: แสดงถึงค่าที่ไม่มีอะไรชัดเจนundefined
: ค่าที่ถูกกำหนดโดยอัตโนมัติให้กับตัวแปรที่ยังไม่ได้รับการกำหนดค่าเริ่มต้นSymbol
: ประเภทข้อมูลที่ใช้สร้างค่าที่ไม่ซ้ำ
1// Object: A data structure that holds multiple properties
2let person = {
3 name: "Alice",
4 age: 25,
5 isStudent: false
6};
7console.log("Object:", person);
8console.log("Object Property (name):", person.name);
9console.log("Object Property (age):", person.age);
10
11// Array: A list that holds multiple values
12let numbers = [10, 20, 30, 40];
13console.log("Array:", numbers);
14console.log("Array Element (index 0):", numbers[0]);
15
16// Function: A function object
17function greet(name) {
18 return "Hello, " + name + "!";
19}
20console.log("Function Output:", greet("Bob"));
21
22// Another way to define a function using arrow syntax
23let add = (a, b) => a + b;
24console.log("Arrow Function Output (3 + 5):", add(3, 5));
- ประเภทของวัตถุ:
Object
: โครงสร้างข้อมูลที่มีคุณสมบัติหลากหลายArray
: รายการที่มีค่าหลายค่าFunction
: วัตถุที่เป็นฟังก์ชัน
การกำหนดค่าและกำหนดค่าใหม่ให้กับตัวแปร
ตัวแปรที่ประกาศด้วย let
หรือ var
สามารถกำหนดค่าใหม่ได้ แต่ const
ไม่สามารถกำหนดค่าใหม่ได้หลังจากที่ประกาศ
1let score = 100;
2score = 150; // Correct
3
4const pi = 3.14;
5pi = 3.14159; // Error
การเลื่อนลอยตัวแปร (Variable Hoisting)
ใน JavaScript มีปรากฏการณ์ที่ตัวแปรจะถูก 'เลื่อน' ไปที่ด้านบนสุดของขอบเขตของมัน ตัวแปรที่ประกาศด้วย var
จะถูกเลื่อนขึ้นด้านบน แต่การใช้ let
หรือ const
ก่อนการประกาศจะก่อให้เกิดข้อผิดพลาด
1console.log(a); // undefined
2var a = 10;
3console.log(a); // 10
- ในกรณีนี้ ตัวแปรที่ประกาศด้วย
var
จะถูกยกขึ้น (hoisted) และค่าในตัวแปรจะถูกแสดงผล
1console.log(b); // ReferenceError
2let b = 20;
- ตัวแปรที่ประกาศด้วย
let
จะไม่ถูกยกขึ้น (hoisted) ซึ่งจะทำให้เกิดข้อผิดพลาด
การใช้ตัวแปรอย่างเหมาะสม
พิจารณาข้อควรทราบต่อไปนี้สำหรับการใช้ตัวแปรอย่างเหมาะสม
- ควรใช้
const
และหลีกเลี่ยงการใช้var
- ปฏิบัติตามกฎการตั้งชื่อตัวแปร
- ใช้
camelCase
เช่นuserName
หรือtotalPrice
- หลีกเลี่ยงชื่อที่คลุมเครือ เช่น
data
หรือvalue
และใช้ชื่อที่สื่อความหมายเพื่อเพิ่มความอ่านง่าย - ชื่อตัวแปรไม่สามารถเริ่มต้นด้วยตัวเลข ดังนั้นชื่อเช่น
1variable
จึงไม่สามารถใช้ได้
- ใช้
- การใช้ตัวแปร global มากเกินไปอาจทำให้เกิดความคลุมเครือของ scope และนำไปสู่ข้อผิดพลาด ดังนั้นควรหลีกเลี่ยงการใช้เมื่อเป็นไปได้
สรุป
var
: วิธีการประกาศตัวแปรแบบเก่าที่มีขอบเขตระดับฟังก์ชันlet
: ตัวแปรที่มีขอบเขตระดับบล็อกและสามารถกำหนดค่าใหม่ได้const
: ตัวแปรที่มีขอบเขตระดับบล็อกและไม่สามารถกำหนดค่าใหม่ได้ (ค่าคงที่)- การใช้ตัวแปรควรสอดคล้องกับชนิดข้อมูลของมันและต้องใส่ใจกับขอบเขตของตัวแปร
ตัวอักษรหลบหนี (Escape Characters) ใน JavaScript คืออะไร?
ตัวอักษรหลบหนีคือวิธีที่ใช้ในการแทนตัวอักษรที่มีความหมายพิเศษภายในสตริงธรรมดา ใน JavaScript ตัวอักษรหลบหนีจะถูกนำเสนอด้วยแบ็กสแลช \
เพื่อสร้างเอฟเฟกต์พิเศษให้กับสตริงหรือเพิ่มตัวอักษรควบคุม (Control Characters) ตัวอักษรหลบหนีมีประโยชน์สำหรับการเพิ่มองค์ประกอบเช่น ขึ้นบรรทัดใหม่ (newlines) แท็บ (tabs) หรือเครื่องหมายคำพูดในสตริง
ตัวอย่างการใช้งานตัวอักษรหลบหนี
ด้านล่างคือตัวอย่างโค้ดที่ใช้ตัวอักษรหลบหนี
การหลบหนีเครื่องหมายคำพูดคู่และเดี่ยว
ใช้ตัวอักษรหลบหนีเพื่อแทนเครื่องหมายคำพูดคู่หรือคำพูดเดี่ยวภายในสตริง
1const singleQuote = 'It\'s a beautiful day!';
2console.log(singleQuote); // Output: It's a beautiful day!
3
4const doubleQuote = "He said, \"Hello there!\"";
5console.log(doubleQuote); // Output: He said, "Hello there!"
การหลบหนีแบ็กสแลช
หากต้องการใช้แบ็กสแลชในสตริง ให้หลบหนีมันด้วย \
1const path = "C:\\Program Files\\MyApp";
2console.log(path); // Output: C:\Program Files\MyApp
การหลบหนีขึ้นบรรทัดใหม่และแท็บ
คุณสามารถเพิ่มการขึ้นบรรทัดใหม่และแท็บเพื่อทำให้สตริงที่ยาวอ่านง่ายขึ้น
1const multiline = "First line\nSecond line\nThird line";
2console.log(multiline);
3// Output:
4// First line
5// Second line
6// Third line
7
8const tabbed = "Column1\tColumn2\tColumn3";
9console.log(tabbed); // Output: Column1 Column2 Column3
การหลบหนีตัวอักษร Unicode
การใช้ลำดับการหลบหนี Unicode อนุญาตให้คุณแทนตัวอักษรเฉพาะด้วยรหัสฐานสิบหก
1const smiley = "\u263A"; // Copyright Mark
2console.log(smiley);
หมายเหตุ
การใช้การหลบหนีมากเกินไปอาจทำให้การอ่านโค้ดยากขึ้น
การใช้ตัวอักษรหลบหนีมากเกินไปอาจลดความสามารถในการอ่านโค้ดของคุณ การใช้ตัวอักษรหลบหนีอย่างเหมาะสมในสตริงที่ยาวมีความสำคัญเป็นพิเศษ
ลองพิจารณาใช้เทมเพลตลิตเทอรัล (Template Literals)
ใน JavaScript เทมเพลตลิตเทอรัลที่ใช้แบ็กทิคช่วยให้คุณเพิ่มการขึ้นบรรทัดใหม่หรือแทรกนิพจน์โดยไม่ต้องใช้ตัวอักษรหลบหนี
1const message = `This is a message
2that spans multiple lines`;
3console.log(message);
4// Output:
5// This is a message
6// that spans multiple lines
สรุป
ตัวอักษรหลบหนีมีความสำคัญในการแทนตัวอักษรพิเศษหรือตัวอักษรควบคุมภายในสตริง โดยการหลบหนีเครื่องหมายคำพูดเดี่ยวหรือคู่ และเพิ่มการขึ้นบรรทัดใหม่หรือแท็บ คุณสามารถสร้างสตริงที่ยืดหยุ่นยิ่งขึ้นได้ อย่างไรก็ตาม การใช้ตัวอักษรหลบหนีมากเกินไปอาจทำให้โค้ดยากต่อการอ่าน ดังนั้นควรพิจารณาใช้เทมเพลตลิตเทอรัลเมื่อเหมาะสม
เวอร์ชันของจาวาสคริปต์
จาวาสคริปต์มีมาตรฐานที่เรียกว่า ECMAScript (ES) จาวาสคริปต์ได้รับการพัฒนาขึ้นบนพื้นฐานของมาตรฐานนี้ ด้านล่างเป็นคำอธิบายความเปลี่ยนแปลงในแต่ละเวอร์ชันหลัก
-
ES3 (1999)
เวอร์ชันแรกที่ถูกนำไปใช้อย่างแพร่หลาย มีการกำหนดไวยากรณ์พื้นฐานและฟีเจอร์เบื้องต้น
-
ES5 (2009)
เพิ่มฟีเจอร์ใหม่ เช่น
strict mode
,Array.prototype.forEach
,Object.keys
และอื่น ๆ -
ES6 / ES2015 (2015)
มีการอัปเดตสำคัญของ JavaScript ฟีเจอร์พื้นฐานหลายอย่างของ JavaScript ยุคใหม่ เช่น
let
,const
,arrow functions
,classes
,promises
,modules
และอื่นๆ ถูกนำมาใช้ -
ES7 / ES2016 (2016)
เพิ่ม
Array.prototype.includes
และExponentiation Operator (**)
-
ES8 / ES2017 (2017)
นำเสนอ
async/await
ทำให้การเขียนกระบวนการแบบอะไชนโครนัสง่ายขึ้น -
ES9 / ES2018 (2018)
เพิ่มอิเทอร์เรเตอร์แบบอะไชนโครนัสและ
Rest/Spread Properties
-
ES10 / ES2019 (2019)
เพิ่ม
flatMap
และObject.fromEntries
-
ES11 / ES2020 (2020)
เพิ่ม
Optional Chaining (?.)
และNullish Coalescing Operator (??)
ทำให้สามารถเขียนโค้ดได้ง่ายและปลอดภัยยิ่งขึ้น -
ES12 / ES2021 (2021)
เพิ่ม
String.prototype.replaceAll
และPromise.any
เป็นต้น -
ES13 / ES2022 (2022)
เพิ่ม
Array.prototype.at
และฟิลด์private
ของคลาส (#field
) เป็นต้น -
ES14 / ES2023 (2023)
เพิ่ม
Array.prototype.toSorted
และSymbol.prototype.description
เป็นต้น -
ES15 / ES2024 (2024)
เพิ่ม
Promise.withResolvers
เพื่อการจัดการPromise
ที่ง่ายขึ้น และArrayBuffer
ที่ปรับขนาดได้ เป็นต้น
JavaScript ปัจจุบันมีการอัปเดตทุกปี และเพิ่มฟีเจอร์ใหม่แม้แต่ในเวอร์ชันล่าสุด
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย