Cách sử dụng ES6 Mẫu chữ trong JavaScript
Trong lập trình, thuật ngữ “nghĩa đen” đề cập đến ký hiệu của các giá trị trong mã. Chẳng hạn, chúng tôi ghi chú một giá trị chuỗi bằng một chuỗi chữ đó là các ký tự được đặt trong dấu ngoặc kép hoặc dấu ngoặc đơn ("foo"
, 'quán ba'
, "Đây là một chuỗi!"
).
Mẫu chữ đã được giới thiệu trong Bản thảo 6. Chúng hoạt động khá giống với chuỗi ký tự; họ sản xuất giá trị mẫu và giá trị mẫu thô, cả hai đều là chuỗi.
Tuy nhiên, không giống như chuỗi ký tự, chữ mẫu có thể tạo ra các giá trị dây nhiều dây, một cái gì đó bạn có thể đạt được trong một chuỗi bằng chữ thêm ký tự dòng mới (\ n
) với nó.
Mẫu chữ cũng có thể tạo chuỗi với các giá trị khác (bắt nguồn từ biểu thức) mà bạn sẽ phải sử dụng toán tử cộng trong một chuỗi ký tự ("id của bạn là:" + idKhông
; Ở đâu không có
là một biểu thức biến có giá trị số).
Tất cả các tính năng này làm cho mẫu chữ được ưa thích hơn tạo các giá trị chuỗi.
Cú pháp của mẫu chữ
Dấu phân cách của một mẫu bằng chữ là backtick '
tính cách (còn được gọi là ký tự backquote hoặc ký hiệu dấu trọng âm). Một biểu thức bên trong nghĩa đen (giá trị của nó là đánh giá trong thời gian chạy và được bao gồm trong giá trị cuối cùng được tạo ra bởi nghĩa đen) được đính kèm trong dấu ngoặc nhọn với một ký hiệu đô la trước
$
.
'chuỗi $ someExpression thêm chuỗi'
Đây là một số ví dụ về mẫu chữ sản xuất không thay đổi, thay thế (biểu thức được thay thế bằng các giá trị được đánh giá của chúng) và nhiều lớp dây.
console.log ('xin chào'); // xin chào var name = "Joan"; console.log ('xin chào $ name'); // xin chào Joan console.log ('Joan thân mến, Chào mừng.'); // Joan thân mến, // Chào mừng.
Thoát và giá trị mẫu thô
Trong một mẫu chữ, '
(backtick), \
(dấu gạch chéo ngược) và $
(ký hiệu đô la) ký tự nên thoát sử dụng nhân vật thoát \
nếu chúng được bao gồm trong giá trị mẫu của chúng.
Theo mặc định, tất cả các chuỗi thoát trong một mẫu bằng chữ mặc kệ. Nếu bạn muốn đưa nó vào đầu ra, bạn cần sử dụng nó giá trị mẫu thô.
console.log ('mã nội tuyến trong markup: \' code \ "); // mã nội tuyến trong markup: 'code' var name =" Joan "; console.log ('hello \ $ name.'); / / xin chào $ name. console.log (String.raw'hello \ $ name. '); // xin chào \ $ name.
Các String.raw
phương pháp xuất giá trị mẫu thô (dạng chuỗi thô của một mẫu bằng chữ). Trong đoạn mã trên, hàm gọi của nguyên
phương pháp được gọi là “mẫu được gắn thẻ”.
Mẫu được gắn thẻ
Mẫu được gắn thẻ là một chức năng gọi Ở đâu, thay cho dấu ngoặc đơn thông thường (với các tham số tùy chọn) bên cạnh tên hàm, có một mẫu chữ từ đó hàm lấy các đối số của nó.
Vì vậy, thay vì gọi một chức năng như thế này:
foo (ArgumentForFoo);
Nó được gọi như thế này:
foo'ATemplateStringProvidingArgumentForFoo ';
Chức năng foo
được gọi là chức năng thẻ. Đối số đầu tiên của nó nhận được từ mẫu bằng chữ là một mảng được gọi là đối tượng mẫu.
Đối tượng mẫu (một mảng) giữ tất cả các giá trị chuỗi giải thích từ mẫu bằng chữ và có một nguyên
thuộc tính (mảng khác) chứa tất cả các giá trị chuỗi thô (chưa thoát) giải thích từ cùng một nghĩa đen.
Theo sau đối tượng mẫu, các đối số của hàm thẻ bao gồm tất cả đánh giá giá trị bên ngoài hiện diện trong nghĩa đen đó (những cái được bao trong các dấu ngoặc nhọn $
).
Trong mã dưới đây, foo
chức năng được tạo ra để đưa ra các đối số của nó. Hàm sau đó được gọi trong mẫu thời trang được gắn thẻ, với một mẫu bằng chữ mang hai biểu thức (Tên
và ID
).
tên var = "John"; var id = 478; foo'hello $ name. id của bạn là: $ id. '; hàm foo () console.log (argument [0]); // Mảng ["xin chào", ". Id của bạn là:", "." ] console.log (đối số [1]); // John console.log (argument [2]); // 478
Đối số đầu tiên được đưa ra là đối tượng mẫu mang tất cả các chuỗi được diễn giải từ mẫu bằng chữ, các đối số thứ hai và thứ ba là giá trị đánh giá của các biểu thức, Tên
và ID
.
Các nguyên
bất động sản
Như đã đề cập trước đó, đối tượng mẫu có một tài sản được gọi là nguyên
đó là một mảng chứa tất cả các giá trị chuỗi thô (chưa thoát) giải thích từ mẫu bằng chữ. Đây là cách bạn có thể truy cập nguyên
bất động sản:
var name1 = "John", name2 = "Joan"; foo'hello \ $ name1, $ name2, cả hai bạn thế nào? '; hàm foo () console.log (argument [0]); // Mảng ["xin chào $ name1,", ", cả hai bạn thế nào?"] Console.log (argument [0] .raw); // Mảng ["hello \ $ name1,", ", cả hai bạn thế nào?"] Console.log (argument [1]); // Joan
Các trường hợp sử dụng mẫu được gắn thẻ
Các mẫu được gắn thẻ rất hữu ích khi bạn cần phá vỡ một chuỗi thành các phần riêng biệt như thường xảy ra trong một URL hoặc trong khi phân tích ngôn ngữ. Bạn sẽ tìm thấy một bộ sưu tập ví dụ mẫu được gắn thẻ ở đây.
Khác với IE, mẫu chữ là được hỗ trợ trong tất cả các trình duyệt chính.
Dưới đây, bạn có thể tìm thấy một số ví dụ về chức năng thẻ với chữ ký khác nhau đại diện cho các đối số:
tên var = "John"; foo'hello $ name, cả hai bạn thế nào? '; bar'hello $ name, cả hai bạn thế nào? '; hàm foo (cuộc tranh luận) console.log (args); // Array [Array ["hello", ", cả hai bạn thế nào?"], "John"] thanh chức năng (strVals, ex exVVals) console.log (strVals); // Mảng ["xin chào", ", cả hai bạn thế nào?" ] console.log (exprVals); // Mảng ["John"]
bên trong quán ba
hàm, tham số đầu tiên (địa tầng
) là đối tượng mẫu và cái thứ hai (sử dụng cú pháp lây lan) là một mảng tập hợp tất cả các giá trị biểu thức được đánh giá từ mẫu chữ được truyền cho hàm.
Đặt chuỗi lại với nhau
Nếu bạn muốn có được toàn bộ câu (xuất phát từ nghĩa đen) bên trong chức năng thẻ, nối tất cả các giá trị của các mảng mang các chuỗi mẫu và các giá trị biểu thức được đánh giá. Như thế này:
function foo (strs, S ex exs) ; tôi < 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.';
Các strs
giữ mảng tất cả các chuỗi tìm thấy trong nghĩa đen và exprs
giữ tất cả các giá trị biểu thức được đánh giá từ nghĩa đen.
Nếu thậm chí một giá trị biểu thức tồn tại nối từng giá trị mảng của strs
(ngoại trừ cái cuối cùng) có cùng giá trị chỉ mục là exprs
. Sau đó, ở cuối, thêm giá trị cuối cùng của strs
mảng đến chuỗi nối, tạo thành một câu hoàn chỉnh cách này.