JavaScript ฉบับมือใหม่ – ตอนที่ 1 พื้นฐานการเขียนJS

developer

บทความชุด: JavaScript/Fundamental for beginner

รวมเนื้อหาการใช้ภาษา JavaScript สำหรับมือใหม่ ตั้งแต่หลักการ แนวคิด การทำงานกับเว็บทั้งฝั่งclient-server library&frameworkที่น่าสนใจ จนถึงมาตราฐานการเขียนแบบใหม่ ES6 (ECMAScript6)

JavaScript ถือว่าเป็นหนึ่งในภาษายอดนิยมที่สุดในยุคนี้ มีคนใช้งานมันเยอะมาก แต่ในขณะเดียวกันมันก็เป็นภาษาที่คนไม่เข้าใจเยอะที่สุดเช่นกัน โดยเฉพาะมือใหม่ทั้งหลาย เพราะแค่จะศึกษาก็เจอชื่อต่างๆ นานา เช่น jQuery Angular npm node.js React หรืออะไรต่อมิอะไรมากมายจนไม่รู้จะเริ่มจากไหน

แต่ถ้าถามเรา เราแนะนำให้คุณเริ่มต้นจากพื้นฐานคือตัว JavaScript เพียวๆ ซะก่อน ถ้าเก่งแล้วค่อยขยับไปใช้ตัวอื่นๆ

บทความชุดนี้จะพูดถึงพื้นฐาน JavaScript คร่าวๆ แนะนำแนวทางการใช้งานฉบับโปรแกรมเมอร์มือใหม่ แต่คำว่ามือใหม่ในที่นี้หมายถึงคนที่อาจจะไม่เคยเขียน JavaScript มาก่อนไม่ใช่มือใหม่ในโลกโปรแกรมมิ่งนะ เรื่องของ logic & algorithm พื้นฐานที่โปรแกรมเมอร์ควรจะรู้กันเราจะถือว่าคุณผู้อ่านรู้แล้วยกเว้นถ้ามันน่าสนใจจริงๆ

ถ้าอยากรู้ว่าตัวเองแม่น JavaScript กันขนาดไหน ลองเข้าไปทำแบบทดสอบที่ skillscore.skooldio.com ผลจะออกมาเป็นคะแนนและบอกว่าคุณอยู่ระดับไหน เช่นของเราได้เท่านี้

 

เอ้า งั้นเริ่มกันเลย

JavaScript ไม่ใช่ Java

แม้ว่าทั้งสองภาษาจะมีคำว่า "จาว่า" อยู่ในชื่อเหมือนกัน แต่มันคือคนละภาษาที่ต่างกันโดยสิ้นเชิงเลย ดังนั้นถ้าคุณจะไปคุยกับคนอื่นแล้วรู้สึกว่า JavaScript มันยาวไป อยากย่อหน่อย ก็อย่าย่อว่า Java นะ มันจะชวนให้คนฟังงงว่าคุณกำลังถูกถึงภาษาตัวไหนกันแน่ แต่ให้ย่อว่า js (เจ-เอส) แทนจะดีกว่า

ส่วนเหตุผลที่ชื่อภาษาทั้งสองดันเหมือนกันก็เพราะว่ายุคหนึ่งที่ภาษา Java กำลังมาแรงฉุดไม่อยู่ บริษัท Netscape ผู้สร้างเบราเซอร์สำหรับท่องอินเตอร์เน็ทต้องการสร้างภาษาสคริปตัวหนึ่งขึ้นมา และด้วยความที่ตอนนั้น Netscape เป็นพันธมิตรกับบริษัท Sun ผู้เป็นเจ้าของภาษา Java เลยขอยื่นชื่อมาตั้งภาษาสคริปตัวใหม่ที่กำลังสร้างขึ้นมาซะหน่อยเป็น JavaScript เฉยๆ แบบนั้นเลย

JavaScript เป็นภาษาสคริปที่มีหลายเวอร์ชั่น

ถือว่าคนที่เข้ามาอ่านบทความนี้เป็นโปรแกรมเมอร์ที่แยกความแตกต่างระหว่างภาษาสคริปกับภาษาคอมไพล์ได้นะ (ถ้าแยกไม่ได้เสิร์จ Google เลย เพิ่มสกิลการค้นหาของคุณ)

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

แต่ตัวภาษาดังเดิมนั้นออกแบบมายังไม่ดีมากพอสำหรับเอาไปทำโปรแกรมใหญ่ๆ ที่ซับซ้อน เลยมีการยกเครื่องทำใหม่หลายครั้ง แต่ละครั้งก็จะเพิ่มฟีเจอร์ที่ภาษายุคใหม่ควรจะทำได้ลงไป โดยถ้าเราไปอ่านรายละเอียดจะพบว่าชื่อรุ่นของ JavaScript นั้นจะใช้เป็น ES5, ES2015, ES6 เป็นต้น คือนำหน้าด้วย ES ... เพราะว่าติดปัญหาลิขสิทธิ์นิดหน่อย ตอนนี้สิทธิ์ความเป็นเจ้าของชื่อ JavaScript ตกเป็นของบริษัท Oracle (ถ้าบริษัท Sun เป็นนักวิจัยใจดี บริษัทนี้ก็จะทำตัวเป็นเหมือนพ่อค้ามากกว่า) เขาเลยตกลงกันว่าจะเปลี่ยนชื่อภาษาใหม่เป็น ECMAScript เพราะมาตราฐานของภาษา JavaScript ตอนนี้ตกอยู่ในความดูและของ ECMA เป็นองค์กรกำหนดมาตราฐานของยุโรปคล้ายๆ ISO นั่นแล

ชื่อมาตราฐานของ JavaScript เลยขึ้นด้วย ES ซึ่งก็ย่อมาจาก ECMAScript นั่นเอง

ทีนี้ ปัญหาของการที่มันมีเวอร์ชั่นออกใหม่มาจะมีผลไม่มากถ้าเจ้า JavaScript นี้มันรันบนฝั่งเซิร์ฟเวอร์เช่นภาษา PHP แต่ปัญหาคือมันดันทำงานในฝั่งเบราเซอร์ของผู้ใช้ (หรือที่เรียกว่าฝั่ง Client) ซึ่งในปัจจุบันที่เขียนบทความนี้อยู่ เบราเซอร์แทบจะทุกตัวสามารถรันได้แค่ ES5 เท่านั้น ส่วน ES6 ก็ต้องอดใจรอกันต่อไป

สำหรับบทความชุดนี้จะเน้นที่พื้นฐาน ES5 ถ้าตรงไหนใช้โค้ด ES6 หรือ TypeScript ก็จะเขียนโน๊ตเอาไว้นะ

ทำงานกับ HTML

เป็นเป้าหมายแรกในการสร้าง JavaScript ขึ้นมาคือให้มันจัดการและควบคุม HTML เพื่อไม่ให้หน้าเว็บเพจ "นิ่งเฉย" จนเกินไป ความสามารถหลักๆ เลยเป็นการทำให้ HTML มีการขยับโต้ตอบกับผู้ใช้ได้ ไม่ใช่แสดงขึ้นมาเป็นหน้านิ่งๆ แล้วก็จบแค่นั้น ... อ้อ JavaScript ไม่ได้ทำให้หน้าเว็บสวยงามขึ้นนะ อันนั้นเป็นงานของดีไซเนอร์และ css มันแค่ทำให้หน้าเว็บมี "interactive"

แต่ในตอนนี้ มีคนเอา JavaScript ไปรันบนฝั่งเซิร์ฟเวอร์ เรียกว่า Node.js ทำให้ภาษานี้รับมือได้ทั้ง Server-Client เลยทีเดียว

JavaScript 101

การรัน JavaScript (ต่อไปในบทความนี้อาจจะย่อเหลือแค่ js นะ) เราไม่ต้องไปหาคอมไพเลอร์มาคอมไพล์อะไรให้ยุ่งยากเพราะมันเป็นภาษาสคริปที่รันแบบ interpreter ทีละบรรทัด และเจ้า interpreter ที่รัน js ได้ก็หาไม่ยากเลย เบราเซอร์ยอดฮิตทุกวันในวันนี้สามารถรัน js ได้โดยไม่ต้องลงปลั๊กอินอะไรเพิ่ม

สำหรับเรา ปกติจะใช้ FireBug ของเบราเซอร์ Firefox เพราะความชอบส่วนตัว แต่คนส่วนใหญ่ในประเทศนี้น่าจะใช Chrome กัน เลยจะแนะนำวิธีใช้โดยโครมแทนละกัน

ให้ไปที่เมนู Tools > Developer Tools ถ้าสำหรับภาษาไทยก็ตามรูปข้างบน จะมีหน้าต่างคอนโซลโผล่ออกมา

ให้กดไปที่แท็บ Console ซึ่งจะมีส่วนไว้ให้พิมพ์คำสั่งลงไป (อารมณ์คล้ายหน้า command line) ซึ่งคำสั่งที่เราจะพิมพ์ลงไปได้ก็คือ JavaScript นี่ล่ะ ... เริ่มแรกเลย ลองพิมพ์โค้ดว่า

alert("hello world!");

แล้วกด Enter ดูนะ

เป็นไง? ผลที่ได้ถ้าพิมพ์ไม่ผิดเลยจะมีไดอาล็อกโผล่ขึ้นมา ขอแสดงความยินดีด้วย! คุณเขียน JavaScript เป็นหนึ่งคำสั่งแล้วล่ะ

โค้ดต่อจากนี้ที่จะพูดถึงก็ให้รู้ไว้ว่าถ้าจะรันก็ให้พิมพ์ใน Console ดูนะ

เอ๊ะ ไม่ต้องเขียน semi-colon ก็รันได้เหรอ

สำหรับโปรแกรมเมอร์สายซี ไม่ว่าจะเป็น C/C++ Java C# PHP หรืออะไรทำนองนี้น่าจะชินกับการพิมพ์เจ้าเครื่องหมาย  หลังคำสั่งทุกครั้ง (ถ้าลืมก็คอมไพล์ไม่ผ่านยังไงล่ะ) สำหรับ JavaScript ที่ยึดเอาภาษาซีเป็นต้นแบบเช่นกันก็ยังคงคอนเซ็ปตัวนี้อยู่ แต่ที่มันอินดี้คือ คุณจะไม่ใส่ semi-colon ก็ได้นะ #แบบนี้ก็ได้เหรอ

เช่น alert("hello world!"); สามารถพิมพ์ว่า alert("hello world!") แล้วก็ยังรันได้อยู่เหมือนเดิม

อ้าว ถ้าอย่างนั้น ไม่ใส่ก็ได้สินะ ... ถูกต้องแล้ว แต่ก่อนจะละ semi-colon ทิ้งไปต้องเข้าใจก่อนว่า JavaScript จะใช้หลักการอ่านคำสั่งทีละบรรทัด ถ้าคุณจะไม่ใส่ semi-colon ก็จงเขียนคำสั่งให้จบในบรรทัดเช่น

//แบบนี้รันได้
x = 1
y = 2

//แต่ถ้าแบบนี้จะรันไม่ได้
x = 1 y = 2

//ถ้าเติม semi-colon ลงไป ก็จะแก้ปัญหาได้
x = 1; y = 2

 

Variable

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

JavaScript มีระบบตัวแปรแบบ Dynamic Typing หรือชนิดตัวแปรจะเป็นอะไรก็ได้ เปลี่ยนได้เรื่อยๆ ตามค่าที่ตัวมันเก็บเหมือนกับภาษา Python หรือ Ruby ... ไม่เหมือนพวก Static Typing แบบภาษา C หรือ Java ที่ต้องประกาศ int, double, char ไปเลยว่าตัวแปรนี้จะเก็บข้อมูลชนิดไหน

JavaScript จะใช้แค่คีย์เวิร์ด var ตัวเดียว

เช่น

var x;
var n = 123;
var f = 100.258;
var b = true;
var name = 'tamemo.com';

ปกติแล้วเรามักจะต้องประกาศตัวแปรก่อนใช้งาน แต่สำหรับ JavaScript นั้นอนุญาตให้เราใช้งานตัวแปรโดยไม่ต้องประกาศ var ก็ยังได้ล่ะ เช่น

x = 1;
y = 'test';

ส่วนความแตกต่างระหว่างตัวแปรที่มีการประกาศ var กับไม่ประกาศเดี๋ยวเราจะมาพูดถึงในหัวข้อต่อๆ ไป (แต่ข้อควรระวังคือตัวแปรไหนประกาศ var ไปแล้ว ห้ามประกาศซ้ำนะ)

ชนิดตัวแปรจะแบบออกเป็น 2 ชนิดใหญ่ๆ คือ

  1. Primitive Type - ชนิดตัวแปรมาตราฐาน เก็บค่า value ของ เลข สตริง และ บูลีน แบบภาษาอื่นๆ
    1. number - สำหรับภาษานี้จะไม่แยก integer/float (จำนวนเต็ม/ทศนิยม) เลขก็คือเลข ตัวเลขทั้งหมดนับเป็น number แต่ถ้าจะลงลึกถึงรายละเอียดมันคือ double-precision ขนาด 64 bits
    2. string - เช่นกันกับตัวอักษร ภาษานี้ไม่แยก char/string คือตัวอักษรไม่ว่า 1 ตัวหรือยาวเป็นประโยคจะเรียก string ทั้งหมด และ quote ที่ใช้กับ string ก็สามารถเลือกได้ด้วยว่าจะใช้แบบไหน ระหว่า  (single quote) กับ  (double quote)
    3. boolean - อันนี้ปกติมันก็เป็นค่าได้แค่ true/false อยู่แล้ว ในภาษานี้ก็ไม่มีอะไรผิดปกติไปจากภาษาอื่น
  2. Object Type - ชนิดตัวแปรแบบวัตถุ วิธีใช้เช่นเดียวกับภาษาระดับสูงอื่นๆ ตัวเด่นๆ ที่เจอบ่อยก็เช่น
    1. object
    2. function
    3. array
    4. Date
    5. RegExp

console.log

เรื่องของประเภทตัวแปรยังไม่จบ แต่ขอขัดจังหวะด้วยคำสั่งสำหรับปริ๊นค่าตัวแปรออกมาดูกันก่อนนะ

ปกติแล้วเวลาพวกเราเขียนโปรแกรมกัน ถ้าอยากดูค่าที่เก็บอยู่ในตัวแปรก็จะใช้คำสั่ง print ของแต่ละภาษา สำหรับ JavaScript แล้วเชื่อว่าคำสั่งแรกๆ ที่รู้จักและเอาไว้ใช้แสดงค่าของตัวแปรได้คือคำสั่ง alert() (จริงมั้ยล่ะ? ฮา) แต่เอาตรงๆ คือมันเป็นคำสั่งที่ใช้งานไม่สะดวกเอาซะเลย ก็เลยขอแนะนำคำสั่งสำหรับปริ๊นค่าตัวแปรอีกตัว คือ

console.log()

วิธีการใช้นั้นง่ายมาก คือโยนตัวแปรที่ต้องการแสดงผลลงไป มันก็จะแสดงรายละเอียดตัวแปรตัวนั้นทั้งหมดออกมาเลย ใช้ง่ายมาก แถมไม่ต้องกังวลว่าจะลืมเอาออกตอนเขียนโปรแกรมเสร็จแล้วด้วยนะ เพราะผลจากการ log จะโผล่แค่ในหน้า console เท่านั้น

 

consolelogเอาล่ะ กลับมาที่เรื่องของตัวแปรกันต่อ

Number

ชนิดตัวแปรแบบ ตัวเลข ของ JavaScript นั้นใช้ระบบแบบ ทศนิยมขนาด 64-bit หรือเท่ากับ double ของภาษาตระกูลซีนั่นเอง

ดังนั้นไม่ใช่ว่ามันจะเก็บเลขได้ไม่รู้จบ มีลิมิตขนาดเหมือนกัน ถ้าใช้เกินไปก็จะกลายเป็นชนิดข้อมูลแบบ NaN หรือ not a number .. แต่ถ้าใช้เก็บเลขตำนวนเต็มหรือ integer จะใช้ระบบแบบ unsigned 53-bits แทน

ส่วนฟังก์ชันจัดการตัวเลขมีทุกอย่างให้ใช้เหมือนภาษาตระกูลซีทุกอย่าง ใช้เคยเขียน C หรือ Java มาน่าจะใช้เป็นในทันที

var x;
x = 18;
x = 18.75;

x = 245.2e-50;
x = 0xff;

x = NaN;
x = Infinity;
x = -Infinity;

x = parseInt('1.2'); // 1
x = parseFloat('1.2'); // 1.2
x = Math.pow(2, 3); // 8
x = Math.ceil(1.5); // 2
x = Math.floor(1.5); // 1
x = Math.abs(-10); // 10
x = Math.PI; // <span class="objectBox objectBox-number ">3.141592653589793</span>
x = Math.random(); // <span class="objectBox objectBox-number ">0.753489534278567</span>

isNaN(x); // true

string

สำหรับภาษานี้ string หรือ สายอัขระ (เรียกว่าประโยคน่าจะเข้าใจง่ายกว่า) เป็น primitive type ไม่เหมือนภาษา Java ที่เป็นชนิด object

เนื่องจากภาษานี้ไม่มี char การประกาศ string ขึ้นมาใช้เลยเลือกได้เลยว่าจะใช้  (single quote) หรือ  (double quote) ตามสบายเลย

ส่วน method ที่ใช้ได้ก็เหมือนกับ number คือแทบจะลอกภาษาตระกูลซีมาครบเลย ยกเว้นที่เขียนผิดบ่อยๆ คือ .length ในภาษานี้ถือเป็น properties ไม่ใช่ method

var a = 'i have an apple';
var b = "It's gonna be OK.";
var c = 'นี่คือ \'JS\' ล่ะ';

'this is a pen'.length; // 13
'this is a pen'.indexOf('is'); // 2
'this is a pen'.charAt(1); // h
'this is a pen'.replace('pen', 'apple'); //this is a apple
'this is a pen'.substring(2,3); // i

ขอเสริมอีกนิดว่า method ทั้งหมดของ string เป็นแบบ immutable คือไม่แก้ไขค่าต้นฉบับ ถ้าอยากจะให้ค่าในตัวแปรเปลี่ยนต้องเอาตัวแปรมารับด้วยเช่น

var str = 'this is a book';
str = str.substring(5);

boolean

ค่าความจริงที่มีแค่ true/false แต่เนื่องจากตัวภาษาเป็น dynamic type การเช็กว่าตัวแปรเก็บค่าเท่ากันหรือไม่อาจจะมีการคิดชนิดตัวแปรเข้ามาด้วยเลยมี === และ !== ให้ใช้เพิ่มจาก == และ != เดิม

โดยถ้าใช้ === และ !==  หมายถึงเราต้องการเช็กถึงระดับ type ว่าตรงกันด้วยนะ

12 == '12' // true
12 === '12' // false
12 != '12' // false
12 !== '12' // true

undefined กับ null

สำหรับคนที่เคยเขียนภาษาอื่นมา null หรือ nil ก็คือค่าว่าง ไม่มีอะไรเลย โบ๋เบ๋ แต่สำหรับภาษา JavaScript จะมีชนิดตัวแปรอีกตัวมาให้ปวดหัวเล่นนั่นคือ undefined ที่ทำตัวเหมือน null ทุกอย่างแต่ดันเป็นคนละตัวกัน โดยมีวิธีจำง่ายๆ คือ

null เราเป็นคนกำหนดเอง ... ส่วน undefined เป็นภาษาที่กำหนดค่าเริ่มต้นมาให้ เช่น

var x;
console.log(typeof x); // undefined

var y = null;
console.log(typeof y); // null

console.log(undefined == null); // true
console.log(undefined === null); // false

console.log(typeof z === 'undefined');
console.log(z); // ERROR! ReferenceError: z is not defined

แต่มีเรื่องประหลาดอย่างนึงคือ ภาษานี้ดันให้ผู้ใช้กำหนดค่าเป็น undefined ด้วยตัวเองได้ด้วยนะเช่น x = undefined;

array

ชนิดตัวแปรแบบ array ถือว่าเป็น object แบบหนึ่ง (คือถ้าสั่ง typeof จะได้ 'object') ลักษณะการใช้เหมือน array ในภาษาอื่นแต่ไม่จำเป็นต้องประกาศจำนวนช่อง ขนาดของarrayสามารถย่อ-ขยายได้ตามข้อมูลภายใน น่าจะใช้เคียงกับ array ในภาษา PHP ที่สุด

var arr = new Array();
arr[0] = 'a';
arr[1] = 'b';
// ["a", "b"]

//กำหนดขนาดเริ่มต้นก่อนก็ได้
arr = new Array(3); // [undefined, undefined, undefined]

//แต่ถ้าใส่ไปมากกว่า 1 ตัวจะเป็นการกำหนดสมาชิกเริ่มต้นแทน
arr = new Array(1, 2); // [1, 2]

//หรือรูปย่อ
arr = [1, 2]; // [1, 2]

console.log(typeof arr); // object
console.log(arr instanceof Array); // true

ส่วนการเติมข้อมูลเข้าไปใน array นอกจากกำหนด index เองแล้ว เราจะใช้ push-pop / shift-unshift เป็น method เอาไว้เพิ่ม/ลดข้อมูลใน array โดย push-pop จะใช้กับด้านท้าย (tail) ส่วน shift-unshift จะใช้กับด้านหัว (head) เช่น

var arr = [1, 2, 3, 4];

x = arr.pop(); // x = 4, arr = [1, 2, 3]
arr.push(5); // arr = [1, 2, 3, 5]

x = arr.shift(); // x = 1, arr = [2, 3, 5]
arr.unshift(0); // arr = [0, 2, 3, 5]

ส่วนถ้าเป็น array หลายมิติจะใช้วิธีประกาศ array ข้างใน array อีกที เช่น

var arr = [1, [2, 3], [4, [5, 'X']]];

arr[0] // 1
arr[1][0] // 2
arr[2][1][1] // 'X'

function

ภาษา JavaScript เป็นภาษาที่รองรับแนวคิดของ functional programming มาเยอะมาก (คืออะไร อ่านได้ ที่นี่ และ ที่นี่) ดังนั้นลูกเล่นของ function ในภาษานี้จึงมีหลากหลายสุดๆ ขนาดแยกออกไปเขียนอีก 1 บทความได้เลย

เฉพาะบทความนี้เราจะเกริ่นแค่คร่าวๆ พอ และจะไปเจาะลึกกันในบทความต่อๆ ไปแทนนะ

function plus(x, y){
    return x + y;
}

var sum = plus(1, 2);

function noop(){
    //do nothing
}

var x = noop(); // undefined

จะเห็นว่าการประกาศฟังก์ชั่นในภาษานี้ทำได้ง่ายมาก return type ก็ไม่ต้องบอก parameter จะใส่กี่ตัวก็ได้ แถมจะมี return หรือไม่ก็ไม่ใช่สิ่งที่ JavaScript แคร์แต่อย่างใด แต่ถ้าเอาฟังก์ชั่นนั้นไปรัน จะได้ค่ากลับเป็น undefined

ที่สำคัญคือ function ในภาษานี้เป็น type ที่อยู่ในระดับ "first-class" หรือประชาชนชั้นหนึ่ง

fist-class type คือชนิดตัวแปรที่ยอมให้ประกาศเป็นตัวแปรได้ ปกติเราจะเจอแต่พวก int string เช่น int x หรือ string s คืสร้างตัวแปรมาเก็บจำนวเต็มและประโยค แต่สำหรับ js นั้น function ก็สามารถประกาศเป็นตัวแปรได้ด้วยเช่นกัน

function plus(x, y){
    return x + y;
}

function minus(x, y){
    return x - y;
}

plus(10,4); // 14
minus(10,4); // 6

var op = plus;
op(10,4); // 14
op = minus;
op(10,4); // 6

ในส่วนแรกเราประกาศฟังก์ชันขึ้นมา 2 ตัว การเรียกใช้ก็ธรรมดาทั่วไป อันนี้ไมมีอะไรแปลก

ต่อมาก็สร้างตัวแปรชื่อ op ขึ้นมาแล้วกำหดค่า plus ให้ (สังเกตว่าไม่ได้สั่งว่า op = plus() นะ แค่ plus ตรงๆ) ความหมายของมันคือ op ได้กลายเป็นฟังก์ชันไปแล้ว เราเลยเรียกให้ op ทำงานได้ด้วยคำสั่ง op() ซึ่งจะให้ผลเหมือนกับ plus ทุกอย่างเลย

คำเติอน: อย่าขึ้นบรรทัดใหม่ที่ return

เมื่อตอนต้นของบทความบอกไปแล้วว่า js นั้นไม่เขียน ; ท้ายคำสั่งก็ยังรันได้เพราะมันตัดคำสั่งด้วยบรรทัด ลองมาดูโค้ดนี้กัน

function test1(){
    return 10
}

function test2(){
    return
        10
}

test1() // 10
test2() // ???

โค้ดทั้งสองทำงานเหมือนกันเลย คือ return ค่ากลับมา เจ้า test1() น่ะไม่มีปัญหา ได้ค่า 10 ตามที่คาดหวัง แต่ลองเดากันดูว่า test2() จะให้ค่าเป็นอะไร?

เฉลยนะ ... ได้ค่าเป็น undefined ล่ะ ห๊ะ ทำไมล่ะ ก็เขียนอยู่ว่า return 10 แค่ขึ้นบรรทัดใหม่เอง ไม่ได้เหรอ

ก็...ไม่ได้น่ะสิ เพราะ js อ่านคำสั่งทีละบรรทัด ทีนี้คำสั่ง return เป็นคำสั่งที่สมบูรณ์ในตัวเอง (return ไม่ใส่ค่าได้ คือตอบกลับเป็น undefied) มันเลยทำงานก่อนจะถึงบรรทัด 10 ไงล่ะ

object

ถึงเราจะเรียกมันว่า object แต่ถ้าเอาจริงๆ น่าจะเรียกมันว่า collection หรือ map ซะมากกว่า โดย object ในภาษานี้จะมีการเก็บข้อมูลในรูปของ key-value และไม่ต้องสร้างขึ้นมาจาก class ด้วย (ยกเว้นถ้าเขียน ES6 หรือ TypeScript)

เช่นเดียวกับ function คือเนื้อหาของ object นั้นเยอะมาก ในบทความนี้เลยจะพูดแค่คร่าวๆ ก่อนนะ วิธีสร้าง object ทำได้ดังนี้

var obj = new Object();
//หรือ
var obj = {};

ส่วนการใช้งาน object จะมีลักษณะเหมือนกับ array เลยเพียงแค่ key ของ object ไม่จำกัดว่าต้องเป็น int เหมือนของ array

var obj = {};
obj[1] = 10;

//key เป็น string ก็ได้
obj['val'] = 20;
//หรือใช้ . ในการเข้าถึง
obj.val = 20;

//หรือประกาศตั้งแต่แรก
obj = {
    1: 10,
    val: 20
};

สำหรับตัวแปรประเภท object ของ JavaScript นั้นเป็นที่มาจากฟอร์แมท JSON (เจสัน - JavaScript Object Notation) ที่เป็นหนึ่งในมาตราฐานการส่งข้อมูลข้ามระบในยุคนี้ด้วย

 

Flow Control

ภาษาโปรแกรมทุกภาษาต้องมีคำสั่งที่เอาไว้เลือกเส้นทางในการทำงาน นั่นคือ if-else และ loop

ของ js นั้นค่อนข้างง่ายเพราะมันลอกภาษา C มาทั้งดุ้นเลย (เช่นเดียวกับ Java และ C#)

if( x > 0 ){
    //TODO
}

if( x > 0 ){
    //TODO
}
else{
    //TODO
}

for( i = 0; i < 100; i++ ){
    //TODO
}

while( i < 100 ){
    //TODO
}

do{
    //TODO
} while( i < 100 );

เหมือนเป๊ะ วิธีใช้ไม่ยากเลย แต่สำหรับลูปแบบ for นั้นจะพิเศษกว่าชาวบ้านเล็กน้อยเพราะมันมีสั่งที่เรียกว่า for..in อยู่ (ถ้าเป็น ES6 จะมี for..of เพิ่มมาอีกตัวด้วย)

var data = [1, 2, 3, 4];

//standard
for( i = 0; i < data.length; i++ ){
    console.log(data[i]);
}

//for..in
for( i in data ){
    console.log(data[i]);
}

//ES6: for..of
for( i of data ){
    console.log(i);
}

ผลจากการรันทั้งหมดจะได้ค่า 1 2 3 4 ทุกตัว


สำหรับบทความแรกในซีรีย์ JavaScript ชุดนี้ก็เอาไว้แค่นี้ก่อน ตอนนี้ทุกคนน่าจะได้พื้นฐานการเขียน js ระดับหนึ่งแล้ว เดี๋ยวเราจะมาต่อหัวข้อที่เริ่มยากขึ้นในบทความหน้ากัน

5812 Total Views 4 Views Today
Ta

Ta

สิ่งมีชีวิตตัวอ้วนๆ กลมๆ เคลื่อนที่ไปไหนโดยการกลิ้ง .. ถนัดการดำรงชีวิตโดยไม่โดนแสงแดด
ปัจจุบันเป็น Senior Software Engineer อยู่ที่ Centrillion Technology
งานอดิเรกคือ เขียนโปรแกรม อ่านหนังสือ เขียนบทความ วาดรูป และ เล่นแบดมินตัน

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *