Article · programming
JavaScript พื้นฐาน EP. 2: ตัวแปรและชนิดข้อมูล
JavaScript
บทเรียนตอนที่ 2 ของซีรีส์ JavaScript คืออะไร? เริ่มต้นเขียนโปรแกรม เรียนรู้การประกาศตัวแปรด้วย let และ const ชนิดข้อมูลพื้นฐาน การตรวจสอบชนิดข้อมูล และการแปลงค่าพร้อมตัวอย่างที่นำไปทดลองได้จริง
EP. 2: รู้จักตัวแปรและชนิดข้อมูล
จากตอนแรกที่เราได้รู้จัก JavaScript และบทบาทของภาษานี้ในการพัฒนาเว็บไซต์ ตอนนี้เราจะเริ่มจัดการข้อมูลด้วยตัวแปร เพราะโปรแกรมส่วนใหญ่จำเป็นต้องเก็บข้อมูลไว้ใช้งาน เช่น ชื่อผู้ใช้ อายุ ราคา จำนวนสินค้า หรือสถานะการเข้าสู่ระบบ เมื่อเข้าใจตัวแปรและชนิดข้อมูลแล้ว เราจะสามารถเขียนโปรแกรมที่รับข้อมูล ประมวลผล และแสดงผลได้อย่างเป็นระบบ
เป้าหมายของตอนนี้เมื่อเรียนจบ คุณจะสามารถประกาศตัวแปรด้วย let และ const อธิบายชนิดข้อมูลพื้นฐาน ใช้ typeof ตรวจสอบชนิดข้อมูล และแปลงข้อความให้เป็นตัวเลขอย่างถูกต้องในสถานการณ์ทั่วไป
1. ตัวแปรคืออะไร?
ตัวแปร (Variable) เปรียบเสมือนช่องที่ใช้เก็บข้อมูลเพื่อเรียกกลับมาใช้งานภายหลัง ใน JavaScript เราสามารถประกาศตัวแปรด้วย let หรือ const ได้ ส่วน var เป็นรูปแบบเดิมที่ยังพบในโค้ดเก่า แต่ผู้เริ่มต้นควรทำความเข้าใจ let และ const ก่อน เพราะช่วยให้กำหนดขอบเขตการใช้งานได้ชัดเจนขึ้น
let userName = 'Mali';
let age = 12;
const siteName = 'LevelLance';
console.log(userName);
console.log(age);
console.log(siteName);
userName = 'Nina';
age = 13;
console.log(userName);
console.log(age);
ตัวแปร userName และ age ประกาศด้วย let จึงสามารถกำหนดค่าใหม่ให้ตัวแปรเดิมได้ ส่วน siteName ประกาศด้วย const จึงไม่สามารถกำหนดค่าใหม่ให้ตัวแปรนั้นได้ หากลองเขียน siteName = 'New Name' โปรแกรมจะเกิด TypeError
ความแตกต่างระหว่าง let และ const
| คุณสมบัติ | let | const |
|---|---|---|
| ต้องกำหนดค่าตอนประกาศหรือไม่ | ไม่จำเป็น | จำเป็น |
| กำหนดค่าใหม่ให้ตัวแปรเดิม | ทำได้ | ทำไม่ได้ |
| ขอบเขตการใช้งาน | Block scope | Block scope |
| เหมาะกับกรณี | ค่าที่ต้องเปลี่ยนระหว่างทำงาน | ค่าที่ไม่ต้องกำหนดใหม่ |
แนวทางที่แนะนำเริ่มต้นด้วย const เมื่อไม่จำเป็นต้องกำหนดค่าใหม่ และเปลี่ยนเป็น let เมื่อจำเป็นต้องเปลี่ยนค่าของตัวแปร หลีกเลี่ยงการใช้ var ในโค้ดใหม่หากไม่มีเหตุผลเฉพาะ
2. ตั้งชื่อตัวแปรอย่างไรให้ถูกต้อง?
ชื่อตัวแปรช่วยบอกความหมายของข้อมูล จึงควรตั้งชื่อให้สื่อความหมาย เช่น productPrice, studentName หรือ totalScore ชื่อตัวแปรใน JavaScript แยกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้น totalScore และ totalscore จึงถือเป็นคนละชื่อกัน
- ชื่อตัวแปรสามารถใช้ตัวอักษร ตัวเลข เครื่องหมายขีดล่าง (_) และเครื่องหมายดอลลาร์ ($) ได้ตามกฎของภาษา
- ชื่อตัวแปรไม่สามารถเริ่มต้นด้วยตัวเลขได้
- ห้ามใช้คำสงวนของภาษาเป็นชื่อตัวแปร เช่น const, let หรือ return
- นิยมใช้ camelCase เช่น firstName, productPrice และ totalAmount
- ควรเลือกชื่อที่บอกความหมาย แทนชื่อกว้าง ๆ เช่น x หรือ data เมื่อมีชื่อที่ชัดเจนกว่า
const firstName = 'Mali';
const productPrice = 125;
let totalAmount = 0;
totalAmount = productPrice * 2;
console.log(firstName);
console.log(totalAmount);
3. ชนิดข้อมูลพื้นฐานใน JavaScript
ข้อมูลแต่ละชนิดมีลักษณะและวิธีใช้งานต่างกัน ชนิดข้อมูลที่พบได้บ่อย ได้แก่ String สำหรับข้อความ Number สำหรับตัวเลข Boolean สำหรับค่าจริงหรือเท็จ รวมถึง Undefined, Null, BigInt และ Symbol ส่วน Object ใช้แทนข้อมูลที่มีโครงสร้างซับซ้อนขึ้น และ Array ใช้เก็บรายการข้อมูลหลายค่า
| ชนิดข้อมูล | ตัวอย่าง | ความหมาย |
|---|---|---|
| String | 'สวัสดี' | ข้อความ |
| Number | 25 หรือ 3.14 | ตัวเลขจำนวนเต็มหรือทศนิยม |
| Boolean | true หรือ false | ค่าจริงหรือเท็จ |
| Undefined | let result; | ตัวแปรที่ยังไม่มีค่าที่กำหนดไว้ |
| Null | null | ค่าที่ระบุว่าไม่มีข้อมูลโดยตั้งใจ |
| BigInt | 12345678901234567890n | จำนวนเต็มขนาดใหญ่ |
| Symbol | Symbol('id') | ค่าที่ไม่ซ้ำกัน ใช้เป็นตัวระบุได้ |
| Object | { name: 'Mali' } | ข้อมูลแบบมีคุณสมบัติ |
| Array | ['แดง', 'น้ำเงิน'] | รายการข้อมูลหลายค่า |
const name = 'Mali';
const score = 95;
const isPassed = true;
let result;
const emptyValue = null;
const largeNumber = 12345678901234567890n;
const uniqueId = Symbol('id');
const student = { name: 'Mali', score: 95 };
const colors = ['แดง', 'น้ำเงิน', 'เขียว'];
console.log(typeof name);
console.log(typeof score);
console.log(typeof isPassed);
console.log(typeof result);
console.log(typeof emptyValue);
console.log(typeof largeNumber);
console.log(typeof uniqueId);
console.log(typeof student);
console.log(Array.isArray(colors));
ข้อควรจำเกี่ยวกับ typeoftypeof null ให้ผลเป็น 'object' ซึ่งเป็นพฤติกรรมที่สืบทอดมาตั้งแต่ JavaScript รุ่นแรก ๆ ไม่ได้หมายความว่า null เป็น Object จริง ๆ หากต้องตรวจสอบ null ให้เปรียบเทียบด้วย value === null
4. ตรวจสอบชนิดข้อมูลด้วย typeof
ตัวดำเนินการ typeof ช่วยตรวจสอบชนิดข้อมูลของค่าบางประเภทและคืนผลเป็นข้อความ เช่น 'string', 'number', 'boolean' หรือ 'undefined' เครื่องมือนี้มีประโยชน์เมื่อต้องตรวจสอบข้อมูลก่อนนำไปประมวลผล อย่างไรก็ตาม typeof ไม่สามารถแยก Array ออกจาก Object ได้โดยตรง จึงควรใช้ Array.isArray() เมื่อต้องการตรวจสอบว่าเป็นอาร์เรย์หรือไม่
const values = ['Hello', 42, false, undefined, { id: 1 }, [1, 2, 3]];
for (const value of values) {
console.log(typeof value);
}
const items = [10, 20, 30];
console.log(Array.isArray(items));
console.log(Array.isArray({ length: 3 }));
const value = null;
console.log(value === null);
5. การแปลงชนิดข้อมูล
ข้อมูลที่รับเข้ามาอาจอยู่ในรูปแบบข้อความ แม้จะมีตัวเลขอยู่ภายในก็ตาม ตัวอย่างเช่น '20' เป็น String แต่ 20 เป็น Number หากนำข้อความตัวเลขไปบวกกับตัวเลขโดยตรง JavaScript อาจต่อข้อความแทนการบวกทางคณิตศาสตร์ จึงควรแปลงข้อมูลให้ตรงกับวัตถุประสงค์ก่อนคำนวณ
const textNumber = '20';
const numberValue = Number(textNumber);
console.log(textNumber + 5);
console.log(numberValue + 5);
console.log(Number('12.5'));
console.log(Number('hello'));
console.log(String(100));
console.log(Boolean(1));
console.log(Boolean(0));
ผลลัพธ์ของ '20' + 5 คือ '205' เพราะเป็นการต่อข้อความ แต่ Number('20') + 5 ให้ผลเป็น 25 ส่วน Number('hello') ให้ค่า NaN ซึ่งหมายถึงผลลัพธ์ที่ไม่ใช่ตัวเลขที่ถูกต้อง ควรตรวจสอบด้วย Number.isNaN() เมื่อข้อมูลอาจแปลงเป็นตัวเลขไม่ได้
function parseScore(input) {
const score = Number(input);
if (input.trim() === '' || Number.isNaN(score)) {
return 'กรุณากรอกตัวเลขที่ถูกต้อง';
}
if (score < 0 || score > 100) {
return 'คะแนนต้องอยู่ระหว่าง 0 ถึง 100';
}
return `คะแนนของคุณคือ ${score}`;
}
console.log(parseScore('85'));
console.log(parseScore('abc'));
console.log(parseScore('120'));
ความแตกต่างระหว่าง Number และ parseIntNumber('12.8') ได้ 12.8 ขณะที่ parseInt('12.8', 10) ได้ 12 เพราะ parseInt อ่านจำนวนเต็มจากข้อความ ส่วน parseFloat('12.8') ได้ 12.8 การเลือกใช้ขึ้นอยู่กับรูปแบบข้อมูลที่ต้องการ
6. การคำนวณด้วยตัวแปร
เมื่อเก็บข้อมูลไว้ในตัวแปรแล้ว เราสามารถนำตัวแปรมาใช้คำนวณได้ เช่น คำนวณราคารวมของสินค้า ส่วนลด หรือคะแนนเฉลี่ย การแยกค่าที่ต้องใช้คำนวณเป็นตัวแปรทำให้โค้ดอ่านง่ายและแก้ไขได้สะดวก
const productPrice = 250;
const quantity = 3;
const discountRate = 0.10;
const subtotal = productPrice * quantity;
const discount = subtotal * discountRate;
const total = subtotal - discount;
console.log('ราคาก่อนลด:', subtotal);
console.log('ส่วนลด:', discount);
console.log('ราคาสุทธิ:', total);
ตัวอย่างนี้กำหนดราคาสินค้า 250 บาท จำนวน 3 ชิ้น จึงมีราคาก่อนลด 750 บาท เมื่อคิดส่วนลด 10% จะลด 75 บาท และเหลือราคาสุทธิ 675 บาท การตั้งชื่อ subtotal, discount และ total ช่วยให้เห็นขั้นตอนการคำนวณอย่างชัดเจน
7. แบบฝึกหัดท้ายบท
ลองทำโจทย์ต่อไปนี้ด้วยตนเองก่อนดูเฉลย คุณสามารถนำโค้ดไปทดลองใน Developer Console ของเบราว์เซอร์หรือสภาพแวดล้อม JavaScript ที่ใช้งานอยู่ได้
โจทย์ที่ 1: ประกาศตัวแปร
ประกาศตัวแปรชื่อ studentName ให้เก็บชื่อของนักเรียนด้วย const และประกาศตัวแปร score ด้วย let เพื่อเก็บคะแนน 80 จากนั้นเปลี่ยนคะแนนเป็น 90 แล้วแสดงชื่อและคะแนน
โจทย์ที่ 2: ตรวจสอบชนิดข้อมูล
กำหนดตัวแปร price ให้มีค่าเป็น 199.5 และตัวแปร isAvailable ให้มีค่าเป็น true จากนั้นใช้ typeof ตรวจสอบชนิดข้อมูลของทั้งสองตัวแปร
โจทย์ที่ 3: แปลงข้อความเป็นตัวเลข
กำหนดข้อความ quantityText = '4' แล้วแปลงเป็น Number ก่อนคูณด้วยราคาต่อชิ้น 35 บาท ผลลัพธ์ที่ต้องการคือราคารวม 140 บาท
เฉลยตัวอย่าง
const studentName = 'Mali';
let score = 80;
score = 90;
console.log(studentName, score);
const price = 199.5;
const isAvailable = true;
console.log(typeof price);
console.log(typeof isAvailable);
const quantityText = '4';
const quantity = Number(quantityText);
const unitPrice = 35;
const totalPrice = quantity * unitPrice;
console.log(totalPrice);
สรุปท้ายบท
ตัวแปรช่วยเก็บข้อมูลเพื่อเรียกใช้งานซ้ำ let เหมาะกับค่าที่อาจเปลี่ยน ส่วน const เหมาะกับค่าที่ไม่ต้องกำหนดใหม่ ชนิดข้อมูลพื้นฐานประกอบด้วย String, Number, Boolean, Undefined, Null, BigInt และ Symbol ขณะที่ Object และ Array ช่วยจัดเก็บข้อมูลที่มีโครงสร้าง การใช้ typeof และการแปลงชนิดข้อมูลอย่างเหมาะสมจะช่วยลดข้อผิดพลาดในการคำนวณและเตรียมความพร้อมสำหรับตอนถัดไป
ตอนถัดไป: ตัวดำเนินการและนิพจน์EP. 3 จะพาไปรู้จักตัวดำเนินการทางคณิตศาสตร์ การเปรียบเทียบ การใช้ === แทนการเปรียบเทียบแบบหลวม และการสร้างนิพจน์เพื่อให้โปรแกรมตัดสินใจจากข้อมูลได้ถูกต้อง
อ่านจนถึงระยะ 500px ก่อนท้ายหน้าและอยู่ในหน้านี้อย่างน้อย 5 นาที เพื่อรับ EXP วันละครั้ง
⏳ กำลังจับเวลาอ่าน...