Nhảy tới nội dung

Kiểu string (kiểu chuỗi)

String literal

Trong các ngôn ngữ như Java, dấu ngoặc kép biểu thị string literal (String), dấu ngoặc đơn biểu thị char literal (char), nghĩa là type thay đổi theo loại dấu ngoặc dùng.

Trong khi đó JavaScript, dù dùng dấu ngoặc kép hay đơn đều là string type giống nhau. Điểm này giống PHP. Ngoài ra dùng backtick (`) cũng là string type.

ts
"Hello";
'Hello';
`Hello`;
ts
"Hello";
'Hello';
`Hello`;

Nếu chuỗi chứa cùng dấu ngoặc, phải escape bằng backslash \.

ts
'He said "madam, I\'m Adam."'
"He said \"madam, I'm Adam.\""
ts
'He said "madam, I\'m Adam."'
"He said \"madam, I'm Adam.\""

String literal dùng dấu ngoặc kép và đơn không thể xuống dòng giữa chuỗi. Muốn xuống dòng cần dùng escape sequence như \n.

Template literal

Trong JavaScript, chuỗi được bao bởi backtick ` gọi là template literal. Template literal cho phép xuống dòng và chèn expression (expression interpolation).

Để xuống dòng, chỉ cần xuống dòng thực tế trong template literal, sẽ được phản ánh đúng như vậy.

ts
console.log(`Thực sự xuống dòng
thử xem`);
Thực sự xuống dòng
thử xem
ts
console.log(`Thực sự xuống dòng
thử xem`);
Thực sự xuống dòng
thử xem

Để chèn expression, viết theo cú pháp ${expression}.

ts
const count = 10;
console.log(`Hiện tại có ${count} người đang xem.`);
Hiện tại có 10 người đang xem.
ts
const count = 10;
console.log(`Hiện tại có ${count} người đang xem.`);
Hiện tại có 10 người đang xem.

Phần expression không chỉ là biến, còn có thể viết biểu thức tính toán hoặc hàm.

ts
`Giá sau thuế: ${Math.floor(100 * 1.1)} VND`
ts
`Giá sau thuế: ${Math.floor(100 * 1.1)} VND`

Nên dùng ', ", hay ` cho string literal?

Như đã nói, JavaScript có 3 loại dấu ngoặc để biểu thị chuỗi, vậy nên dùng loại nào? Ở đây giới thiệu cách phân biệt theo Prettier - code formatter của JavaScript.
Lưu ý đây không phải câu trả lời đúng hay de facto standard, nếu team có quy chuẩn riêng thì nên tuân theo quy chuẩn đó.

  1. Cơ bản dùng "
  2. Nếu chuỗi chứa " thì dùng '
  3. Khi cần string interpolation thì dùng `

Cơ bản dùng "

Với chuỗi thông thường không có string interpolation bên trong thì dùng ".

Nếu chuỗi chứa " thì dùng '

Nếu chuỗi chứa " thì dùng ' thay vì escape.

Khi cần string interpolation thì dùng `

Khi cần tính toán expression thì dùng template literal `.

Type annotation của string

Type annotation của string trong TypeScript dùng string.

ts
const message: string = "Hello";
ts
const message: string = "Hello";

Có type String tên khá giống, nhưng cần lưu ý đây khác với string.

Nối chuỗi

Nối chuỗi trong JavaScript dùng toán tử nối chuỗi (+). Toán tử tương tự cũng được dùng cho phép cộng kiểu number.

ts
"hello" + "world"
ts
"hello" + "world"

Trong PHP, toán tử nối chuỗi (.) và toán tử cộng số (+) là 2 toán tử khác nhau, nhưng JavaScript dùng cùng dấu cộng cho cả nối chuỗi và phép cộng, nên những người từ PHP chuyển sang JavaScript cần chú ý.