Escape characters ในภาษา JavaScript

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Escape character ในภาษา JavaScript

Escape characters คืออะไร

Escape character คือตัวอักษรพิเศษที่ไม่สามารถกำหนดหรือแสดงอยู่ใน String เหมือนกับที่มันเป็นได้ อาจเป็นเพราะว่ามันเป็นตัวอักษรที่เป็นส่วนหนึ่งในไวยากรณ์ของภาษา ยกตัวอย่างเช่น เครื่องหมาย Double quote (") ใช้สำหรับกำหนดขอบเขต String literal ดังนั้นเพื่อกำหนดมันให้เป็นเนื้อหาของ String เราจะต้องทำการ Escape มันด้วยตัวอักษร Backslash (\) นี่เป็นตัวอย่าง

console.log("My name is \"John\".");

เมื่อเราต้องการกำหนดค่า " ให้เป็นเนื้อหาของ String เราจำเป็นต้อง Escape มัน นั่นเป็นเพราะว่า Double ถูกใช้โดยไวยากรณ์ของภาษาสำหรับกำหนดขอบเขตของ String literal

console.log('I\'m a "JavaScript" programmer.');

ในภาษา JavaScript เราสามารถใช้เครื่องหมาย Single quote สำหรับสร้าง String ได้ และเช่นเดียวกัน เมื่อเราต้องการกำหนดค่าของ Single quote (') ภายใน String เราจะต้องทำการ Escape มัน อย่างไรก็ตาม เมื่อเราใช้ Single quote ในการสร้าง String เราไม่จำเป็นต้องทำการ Escape เครื่องหมาย Double quote ที่อยู่ภายใน และในทางกลับกันสำหรับ Double quote

นี่เป็นผลลัพธ์การทำงานของสองคำสั่งด้านบน

My name is "John".
I'm a "JavaScript" programmer.

อีกตัวอย่างหนึ่งของการใช้งาน Escape character ก็คือในกรณีที่เราต้องการให้มีการขึ้นบรรทัดใหม่ใน String แน่นอนว่าเราไม่สามารถพิมพ์มันลงไปบน String โดยตรงได้ ยกตัวอย่างเช่น

// This code gives syntax error
let myString = "First line
Second line
Third line"; 

จากโค้ดด้านบนจะทำให้เกิดข้อผิดพลาดขึ้นเมื่อเรารันโปรแกรม เนื่องจากว่าการขึ้นบรรทัดใหม่โดยที่ยังไม่ได้ปิด String นั้นทำให้ตัวแปรภาษาไม่สามารถเข้าใจโค้ดของเรา เพื่อแก้ปัญหานี้ เราสามารถใช้ Escape character สำหรับการขึ้นบรรทัดใหม่ได้ ยกตัวอย่างเช่น

let myString = "First line\nSecond line\nThird line\n";

ในตัวอย่างนี้ เป็นการกำหนดการขึ้นบรรทัดใหม่เป็นเนื้อหาของ String ดังนั้นเมื่อเรานำไปแสดงผลหรือคำนวณ มันหมายความว่า String นี้มีสามบรรทัดนั่นเอง

นี่เป็นตารางของ Escape characters ในภาษา JavaScript

Escape character Description
\b Backspace
\t Tab
\n Newline
\v Vertical tab
\f Form feed
\r Carriage return
\" Double quote
\' Single quote
\\ Backslash
\nnn Octal bit pattern
\xnn Hexadecimal bit pattern
\unnnn Four digits Unicode character
\u{nnnn ...} Six digits Unicode character

จากในตารางนั้น เป็นรายการ Escape characters ทั้งหมดในภาษา JavaScript ที่เราสามารถใช้กำหนดค่าให้กับ String ได้ ยกตัวอย่าง เช่น เราสามารถกำหนดค่า Tab ด้วย \t หรือการขึ้นบรรทัดใหม่ด้วย \n มาดูตัวอย่างเพิ่มเติม

using_tab.js
let users = [
    { id: 10, name: "Andril", lang: "JavaScript" },
    { id: 124, name: "Matteo", lang: "TypeScript" },
    { id: 350, name: "Chris", lang: "Python" },
    { id: 1335, name: "Georgie", lang: "Go" }
];

console.log("ID\tNAME\tLANGUAGE");

for (let user of users) {
    console.log(user.id + "\t" + user.name + "\t" + user.lang);
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

ID      NAME    LANGUAGE
10      Andril  JavaScript
124     Matteo  TypeScript
350     Chris   Python
1335    Georgie Go

ในตัวอย่าง เราได้แสดงรายการของชื่อ รหัส และภาษาเขียนโปรแกรมในรูปแบบของตาราง เราได้ใช้ Tab (\t) เพื่อจัดช่องว่างระหว่างคอลัมน์ให้เท่ากัน; Tab นั้นเป็นตัวอักษรพิเศษที่เราไม่สามารถพิมพ์ค่าของมันเข้าไปใน String โดยตรงได้

ต่อมาเป็นตัวอย่างการใช้งานตัวอักษรสำหรับการขึ้นบรรรทัดใหม่ "\n" ซึ่งเราจะสร้างปิรามิดจากตัวเลข นี่เป็นโค้ดของโปรแกรม

using_newline.js
console.log("Three\nTwo\nOne");
console.log("Creating pyramid of numbers");

let size = 8;
let str = "";
for (let i = 0; i < size; i++) {
    for (let j = 0; j < size * 2 - 1; j++) {
        let n = Math.abs(size - j - 1);
        if (n <= i) {
            str += n + 1;
        } else {
            str += " ";
        }
    }
    str += "\n";
}
console.log(str);

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Three
Two
One
Creating pyramid of numbers
       1
      212
     32123
    4321234
   543212345
  65432123456
 7654321234567
876543212345678

ในตัวอย่างนี้ เราแค่ต้องการแสดงให้คุณเห็นว่าเราสามารถใส่การขึ้นบรรทัดใหม่ได้ด้วย "\n" เนื่องจากเราสร้าง String str จากเงื่อนไขการทำงานในคำสั่ง for loop ดังนั้นการแสดงผลในทันทีด้วยฟังก์ชัน console.log จะทำให้เกิดการขึ้นบรรทัดใหม่ทุกครั้ง ซึ่งเราไม่ต้องการแบบนั้น

str += "\n";

นั่นทำให้เราต้องเก็บค่าไว้ในตัวแปรก่อน และกำหนดการขึ้นบรรทัดใหม่ในตำแหน่งที่เราต้องการ ในกรณีนี้คือหลังจากจบแต่ละแถว และแสดงผลมันออกมาในตอนท้ายด้วยฟังก์ชัน console.log

นอกจากนี้ Escape character ยังมักจะถูกใช้ในกรณีที่เราแสดงตัวอักษรที่ไม่มีบนคีย์บอร์ด ยกตัวอย่างเช่น

console.log("\xa9 MarcusCode 2020"); // © MarcusCode 2020
console.log("5 \xd7 4 = 20");        // 5 × 4 = 20

ในตัวอย่างนี้ เป็นการกำหนดค่าให้กับ String โดยการใช้รหัสตัวอักษรในรูปแบบของเลขฐานสิบหก หลังจากนั้นแสดงข้อความออกทางหน้าจอ

โดยที่ \xa9 มีค่าเท่ากับตัวอักษร © และ \xd7 มีค่าเท่ากับเครื่องหมาย × ซึ่งเราไม่สามารถพิมพ์ได้จากคีย์บอร์ด ถึงแม้คุณอาจสามารถคัดลอกตัวอักษรเหล่านี้และใส่ลงไปบน String ได้ แต่สำหรับตัวอักษรบางตัวนั้นอาจจะมีการแสดงผลแตกต่างกันเมื่อคุณเปิดโค้ดของคุณบน Editor ที่แตกต่างกัน นี่จึงเป็นวิธีที่ปลอดภัยในการเขียนตัวอักษรที่ไม่ปกติลงใน String

นอกจากนี้ ทุกตัวอักษรในภาษา JavaScript ยังสามารถแสดงได้ในรูปแบบของ Escape character แบบเลขฐานสิบหก และรหัส Unicode ดังนี้

console.log("\x4a\x61\x76\x61\x53\x63\x72\x69\x70\x74"); // JavaScript
console.log("\u3616\u3634\u3625\u3634\u3652\u3607\u3618"); // ภาษาไทย

ในทางปฏิบัติเรามักจะไม่กำหนดค่าตัวอักษรด้วยวิธีนี้ แต่ในบางครั้ง เราอาจจะได้รับข้อมูลจากแหล่งอื่นๆ มาในรูปแบบเหล่านี้ เช่น การเรียกใช้งาน API ที่ส่งค่ากลับเป็นรหัส Unicode

เนื่องจาก Backslash นั้นเป็นตัวอักษรที่ใช้สำหรับ Escape ตัวอักษรอื่นๆ ดังนั้นเพื่อที่จะแสดงตัวอักษรนี้ภายใน String เราจะต้องทำการ Escape มันด้วยตัวมันเอง

console.log("Backslash \\ is an escape character.");
console.log("New Line is escaped with \\n.");
console.log("Tab is escaped with \\t.");

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Backslash \ is an escape character.
New Line is escaped with \n.
Tab is escaped with \t.

ในตัวอย่างนี้เป็นการแสดงค่าตัวอักษร Escape character ออกมาทางหน้าจอ; \\ นั้นใช้สำหรับกำหนด \ ภายใน String และแสดงออกมาเหมือนกับที่มันเป็น

ในบทนี้ คุณได้เรียนรู้เกียวกับ Escape character ในภาษา JavaScript และได้รู้ว่าเราจะนำมันมาใช้งานอย่างไรในการเขียนโปรแกรม