โฮมเพจ » การเข้ารหัส » วิธีใช้ตัวอักษรเทมเพลต ES6 ใน JavaScript

    วิธีใช้ตัวอักษรเทมเพลต ES6 ใน JavaScript

    ในการเขียนโปรแกรมคำว่า “ตามตัวอักษร” หมายถึง สัญกรณ์ของค่า ในรหัส ตัวอย่างเช่นเราสังเกตเห็นค่าสตริงด้วย a สตริงตัวอักษร ที่มีอักขระที่อยู่ในเครื่องหมายคำพูดคู่หรือเดี่ยว ("foo", 'บาร์', "นี่คือสตริง!").

    เทมเพลตตัวอักษร ถูกนำมาใช้ใน ECMAScript 6. พวกมันทำงานคล้ายกับสตริงตัวอักษร; พวกเขาผลิต ค่าเทมเพลต และ ค่าเทมเพลตดิบ, ซึ่งทั้งสองอย่างเป็นสตริง.

    อย่างไรก็ตามแตกต่างจากตัวอักษรของสตริงตัวอักษรแม่แบบสามารถผลิตค่าที่ สตริงที่มีหลายแถว, สิ่งที่คุณสามารถทำได้ในสตริงตัวอักษรเท่านั้นโดย การเพิ่มอักขระบรรทัดใหม่ (\ n) กับมัน.

    แม่แบบตัวอักษรยังสามารถ สร้างสตริงที่มีค่าอื่น ๆ (มาจากนิพจน์) ซึ่งคุณจะต้องใช้ บวกผู้ประกอบการ ในสตริงตัวอักษร ("id ของคุณคือ:" + idNo; ที่ไหน idNo เป็นนิพจน์ตัวแปรที่มีค่าตัวเลข).

    คุณสมบัติทั้งหมดเหล่านี้ทำให้ตัวอักษรเทมเพลตเป็นที่นิยมมากกว่า สร้างค่าสตริง.

    ไวยากรณ์ของเทมเพลตตัวอักษร

    ตัวคั่นของเทมเพลตตัวอักษรคือ backtick ' ตัวละคร (หรือเรียกอีกอย่างว่าตัวละคร backquote หรือสัญลักษณ์เน้นเสียงร้ายแรง) นิพจน์ภายในตัวอักษร (ค่าที่เป็น ประเมินระหว่างรันไทม์ และรวมอยู่ในมูลค่าสุดท้ายที่ผลิตโดยตัวอักษร) อยู่ใน วงเล็บปีกกา กับ เครื่องหมายดอลลาร์ก่อนหน้า $.

     'string $ someExpression สตริงเพิ่มเติม' 

    นี่คือบางส่วน ตัวอย่างเทมเพลตตัวอักษร การผลิต ไม่เปลี่ยนแปลง, แทน (นิพจน์ถูกแทนที่ด้วยค่าที่ประเมิน) และ หลายเรียงราย เงื่อนไข.

     console.log ( 'สวัสดี'); // hello var name = "Joan"; console.log ('สวัสดี $ name'); // hello Joan console.log ('เรียน Joan, Welcome.'); // Dear Joan, // ยินดีต้อนรับ. 

    การหลบหนี & ค่าเทมเพลตดิบ

    ในเทมเพลตตัวอักษร ' (backtick), \ (แบ็กสแลช) และ $ (เครื่องหมายดอลลาร์) อักขระ ควรหลีกหนี ใช้ ตัวละครหลบหนี \ ถ้าพวกเขาจะรวมอยู่ในค่าแม่แบบของพวกเขา.

    ตามค่าเริ่มต้น escape sequences ทั้งหมดในเทมเพลตตัวอักษรคือ ละเว้น. หากคุณต้องการรวมไว้ในผลลัพธ์คุณต้องใช้มัน ค่าเทมเพลตดิบ.

     console.log ('รหัสแบบอินไลน์ในมาร์กอัป: \' code \ "); // รหัสอินไลน์ในมาร์กอัป: 'code' var name =" Joan "; console.log ('hello \ $ name.'); / / hello $ name. console.log (String.raw'hello \ $ name. '); // hello \ $ name. 

    String.raw วิธี ส่งออกค่าเทมเพลตดิบ (รูปแบบสตริงดิบของแม่แบบตัวอักษร) ในรหัสข้างต้นการเรียกใช้ฟังก์ชันของ ดิบ วิธีการที่เรียกว่า “เทมเพลตที่ติดแท็ก”.

    เทมเพลตที่ติดแท็ก

    เทมเพลตที่ติดแท็กคือ ฟังก์ชั่นการโทร ที่ไหน, แทนที่วงเล็บปกติ (พร้อมพารามิเตอร์เสริม) นอกเหนือจากชื่อฟังก์ชัน, มีเทมเพลตที่แท้จริง จากที่ฟังก์ชั่นได้รับการขัดแย้ง.

    ดังนั้นแทนที่จะเรียกใช้ฟังก์ชันดังนี้:

     foo (ArgumentsForFoo); 

    มันถูกเรียกว่าสิ่งนี้:

     foo'ATemplateStringProvidingArgumentsForFoo '; 

    ฟังก์ชั่น foo เรียกว่า ฟังก์ชั่นแท็ก. อาร์กิวเมนต์แรกที่ได้รับจากเทมเพลตตัวอักษรคือ แถว เรียกว่า วัตถุแม่แบบ.

    วัตถุแม่แบบ (อาร์เรย์) ถือ ค่าสตริงทั้งหมด ตีความจากเทมเพลตตัวอักษรและมี ดิบ property (อาร์เรย์อื่น) ที่เก็บ ค่าสตริง raw (un-escaped) ทั้งหมด ตีความจากตัวอักษรเดียวกัน.

    หลังจากวัตถุแม่แบบข้อโต้แย้งของฟังก์ชั่นแท็กรวมถึง ทั้งหมด การประเมินผล ค่าภายนอก ปรากฏอยู่ในตัวอักษรนั้น (ที่อยู่ในวงเล็บปีกกา $ ).

    ในรหัสด้านล่าง foo ฟังก์ชั่นถูกสร้างขึ้นเพื่อ เอาท์พุทข้อโต้แย้งของมัน. ฟังก์ชั่นนั้นเรียกว่า ในเทมเพลตที่ติดแท็ก, ด้วยเทมเพลตที่มีตัวอักษรสองตัว (ชื่อ และ รหัส).

     var name = "John"; var id = 478; foo'hello $ name ID ของคุณคือ: $ id. '; ฟังก์ชั่น foo () console.log (อาร์กิวเมนต์ [0]); // Array ["hello", ". id ของคุณคือ:", "." ] console.log (อาร์กิวเมนต์ [1]); // John console.log (อาร์กิวเมนต์ [2]); // 478 

    อาร์กิวเมนต์แรกที่ส่งออกคือ วัตถุแม่แบบ ดำเนินการสตริงทั้งหมดตีความจากตัวอักษรแม่แบบข้อโต้แย้งที่สองและสามคือ ค่าที่ประเมิน ของการแสดงออก, ชื่อ และ รหัส.

    ดิบ คุณสมบัติ

    แม่แบบวัตถุมีดังต่อไปนี้ คุณสมบัติที่เรียกว่า ดิบ ซึ่งเป็นอาร์เรย์ที่มี ค่าสตริง raw (un-escaped) ทั้งหมด ตีความจากเทมเพลตตัวอักษร นี่คือวิธีที่คุณสามารถเข้าถึง ดิบ คุณสมบัติ:

     var name1 = "John", name2 = "Joan"; foo'hello \ $ name1, $ name2 คุณเป็นอย่างไรบ้าง '; ฟังก์ชั่น foo () console.log (อาร์กิวเมนต์ [0]); // Array ["hello $ name1,", ", คุณเป็นอย่างไรบ้าง"] console.log (อาร์กิวเมนต์ [0] .raw); // Array ["hello \ $ name1,", ", คุณเป็นอย่างไรบ้าง"] console.log (อาร์กิวเมนต์ [1]); // Joan 
    ใช้กรณีของเทมเพลตที่ติดแท็ก

    เทมเพลตที่ติดแท็กจะมีประโยชน์เมื่อคุณต้องการ ทำลายสตริง แยกส่วนต่าง ๆ เช่นมักจะเป็นกรณีใน URL หรือในขณะที่แยกภาษา คุณจะได้พบกับคอลเลกชันของ แท็กตัวอย่างแม่แบบที่นี่.

    นอกเหนือจาก IE แล้วเทมเพลตตัวอักษรคือ สนับสนุนในเบราว์เซอร์หลัก ๆ ทั้งหมด.

    ด้านล่างคุณสามารถค้นหาตัวอย่างของฟังก์ชั่นแท็กด้วย ลายเซ็นที่แตกต่างกัน ที่แสดงถึงข้อโต้แย้ง:

     var name = "John"; foo'hello $ name คุณเป็นอย่างไรบ้าง '; bar'hello $ name คุณเป็นอย่างไรบ้าง '; ฟังก์ชัน foo (… args) console.log (args); // Array [Array ["hello", ", คุณเป็นอย่างไรบ้าง"], "John"] แถบฟังก์ชัน (strVals, ... exprVals) console.log (strVals); // Array ["hello", "คุณเป็นอย่างไรบ้าง?" ] console.log (exprVals); // Array ["John"] 

    ใน บาร์ ฟังก์ชั่นพารามิเตอร์แรก (strVals) คือ วัตถุแม่แบบ และอันที่สอง (ที่ใช้ไวยากรณ์การแพร่กระจาย) เป็นอาร์เรย์ที่รวบรวม ค่านิพจน์ที่ประเมินทั้งหมด จากเทมเพลตตัวอักษรที่ส่งผ่านไปยังฟังก์ชัน.

    ใส่สายเข้าด้วยกัน

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

     ฟังก์ชั่น foo (strs, … exprs) // หากมีการแสดงออกใด ๆ รวมอยู่ในตัวอักษรถ้า (exprs.length! == 0) var n = strs.length - 1, ผลลัพธ์ = "; สำหรับ (var i = 0 ; ผม < n; i++)  result += strs[i] + exprs[i];  result += strs[n]; console.log(result); //"Hello John."  // if there are no expressions included in the literal else console.log(strs[0]);  name = 'John'; foo'Hello $name.'; 

    STRs อาร์เรย์ถือ สตริงทั้งหมด พบในตัวอักษรและ exprs ถือ ค่านิพจน์ที่ประเมินทั้งหมด จากตัวอักษร.

    ถ้าแม้แต่หนึ่งค่านิพจน์ที่มีอยู่ต่อกันแต่ละค่าของอาร์เรย์ STRs (ยกเว้นอันสุดท้าย) ด้วยค่าดัชนีเดียวกันของ exprs. จากนั้นในตอนท้ายให้เพิ่มค่าสุดท้ายของ STRs อาร์เรย์กับสตริงที่ต่อกัน, สร้างประโยคที่สมบูรณ์ ทางนี้.