DEV Community

iammen
iammen

Posted on • Updated on

10 เรื่องของ ES6 ที่คุณควรรู้ไว้ (ตอนที่ 2 Template Literals)

10 เรื่องของ ES6 ที่คุณควรรู้ไว้ (ตอนที่ 2 Template Literals)

สวัสดีครับท่านผู้สนใจในการเขียนโปรแกรมด้วยภาษา JavaScript ทุกท่าน บทความนี้เป็นตอนที่ 2 ในซี่รีย์ชุด 10 เรื่องของ ES6 ที่คุณควรรู้ไว้ ครั้งนี้เรามาทำความรู้จักกับ Template Literals กัน มาดูกันเลยดีกว่าครับ

Template literals คืออะไร?

ผมขออธิบายความหมายของ Template literals ในแบบที่ผมเข้าใจก็แล้วกันนะครับ ส่วนตัวผมคิดว่ามันก็คือวิธีในการนำเอา expression มาใช้รวมกับ string literals นั่นเอง ทำให้เราจะได้ผลลัพธ์ออกมาเป็น string ชุดใหม่เอาไปใช้งานกันต่อไป

แล้วเจ้า string literals มันคืออะไรกันละ?

string literals คือการกำหนดให้ source code ของเรารับรู้ว่ารูปแบบอะไรคือข้อความหรือที่เรียกทับศัพท์ว่า string นั่งเอง

โดย JavaScript จะแยกแยะว่า ชุดหรือลำดับของตัวอักษรใดละคือ string มันจะดูจากสิ่งที่ถูกปิดหัวท้ายด้วยเครื่องหมาย '' (single quote) หรือ "" (double quotes) ซึ่งถ้ามันพบรูปแบบนี้เมื่อไรมันฟันธงเลยว่าข้อมูลเหล่านั้นละคือ string มาลองดูตัวอย่างกัน

var hero = 'Superman';
Enter fullscreen mode Exit fullscreen mode

จากตัวอย่าง 'Superman' คือ string literal ที่มีค่าข้อมูลจริงๆ คือ Superman ส่วน '' จะไม่ถือว่าเป็นข้อมูล

แล้ว expression ละคืออะไร?

expression ในที่นี้ก็สามารถเป็นได้ทั้ง ตัวแปร, การดำเนินการทางคณิตศาสร์ เช่น + หรือผลลัพธ์ที่ได้จาก function ก็ได้เป็นต้น

Template literals ใน ES5

ใน ES5 ปกติเราจะใช้วิธีเครื่องหมาย + ในการเชื่อม string มากกว่า 1 ชุด เพื่อให้ได้เป็นผลลัพธ์ของ string ชุดใหม่ ตัวอย่างเช่น

var firstName = 'Supot';
var lastName = 'Sukvaree';

// ใช้เครื่องหมาย + ในการเชื่อมข้อความ
var tl = 'My name is ' + firstName + ' ' + lastName;

// ดูผลลัพธ์บน console
console.log(name);
Enter fullscreen mode Exit fullscreen mode

เราสามารถเชื่อมผลลัพธ์ที่ได้จาก function กับข้อความได้เช่นกัน มาดูตัวอย่างกัน

function getFullname() {
  return 'Supot  Sukvaree';
}

// นำค่าที่ return กลับมาจาก function มาเชื่อมกับข้อความ
var tl = 'My name is ' + getFullname();
console.log(tl);
Enter fullscreen mode Exit fullscreen mode

หรือเราสามารถเชื่อมผลลัพธ์ของการดำเนินการกับข้อความได้เหมือนกัน

var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
Enter fullscreen mode Exit fullscreen mode

Template literals ใน ES6

ES6 มีการปรับรูปแบบไวยกรณ์ของการใช้งานนิดหน่อย นั่นคือมันจะใช้เครื่องหมาย ` ` (back-tick) ครอบส่วนของ template literal แทนการใช้งาน '' หรือ "" และใน template literal ก็สามารถที่จะมีสิ่งที่เรียกว่า place holders ไว้ภายในเครื่องหมาย ` ` ได้

หน้าตาของ place holders จะเป็นแบบนี้ ${expression} มาดูตัวอย่างการใช้งานกัน

var firstName = `Supot`;
var lastName = `Sukvaree`;
var tl = `My name is ${firstName} ${lastName}`;
console.log(tl);
Enter fullscreen mode Exit fullscreen mode

การเชื่อมผลลัพธ์ที่ได้จาก function กับข้อความก็ปรับเปลี่ยนไปเล็กน้อย

function getFullname() {
  return 'Supot  Sukvaree';
}
let tl = `My name is ${getFullname()}`;
console.log(tl);
Enter fullscreen mode Exit fullscreen mode

การเชื่อมผลลัพธ์ของการดำเนินการกับข้อความก็ดูสั้นลง

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
Enter fullscreen mode Exit fullscreen mode

Multi-line string

ในการใช้งาน template literals สิ่งหนึ่งที่เราจะมีการใช้งานและพบเจอกันอยู่บ่อยๆ ก็คือการเชื่อมข้อความหลายๆ บรรทัดเข้าด้วยกัน โดยใน ES5 เราจะใช้รูปแบบการเชื่อมข้อความหลายๆ บรรทัดเข้าด้วยกันด้วยวิธีดังนี้

var tl = 'Multi-line string in ES5'
 + 'with "\+" operator '
 + 'string line 3';
console.log(tl);
Enter fullscreen mode Exit fullscreen mode

หรือใช้อีกวิธีหนึ่งได้เช่นกัน

var tl = 'Multi-line string in ES5\n\
using \\n\\';
console.log(tl); // ผลลัพธ์ของการใช้ \n\ จะทำให้มีช่องว่างเกิดขึ้นในข้อความ
Enter fullscreen mode Exit fullscreen mode

ส่วนใน ES6 เราสามารถใช้ ` ` (backticks) แทนได้ แบบนี้

let tl = `Multi-line string in ES6
using \`\``;
console.log(tl);
Enter fullscreen mode Exit fullscreen mode

คงพอทำให้เห็นรูปแบบการใช้งานของ template literals ใน ES6 กันไปพอสมควรนะครับ ชื่นชอบสไตร์การใช้งาน Template literals ของ ES6 หรือ ES5 กันแบบไหนก็ลองพูดคุยกันได้นะครับ ขอจบบทความนี้เพียงเท่านี้ก่อน ติดตามเรื่อง Enhanced Object Literals กันในตอนต่อไปครับ

Top comments (0)