String Concatenating
Có thể nối chuỗi trong JS bằng toán tử + tương tự như C++.
Under the Hood
Ta đã biết chuỗi ở trong JS là immutable object1. Khi thực hiện nối chuỗi, JS sẽ tạo ra một bản sao thứ ba để lưu cả hai chuỗi thành phần.
Xét ví dụ sau:
let hello = "Hello"
hello += " world"
console.log(hello)Bản chất của quá trình nối chuỗi là:

Các JS engine khác nhau có thể có cách xử lý string và bộ nhớ khác nhau.
Warning
Việc sao chép các chuỗi thành phần sang chuỗi kết quả như trên, đặc biệt là khi ta thực hiện nối chuỗi nhiều lần, không phải là một cách làm tốt về mặt hiệu năng. Một số ngôn ngữ khác chẳng hạn như Java hay Golang sử dụng phương thức StringBuilder để xây dựng chuỗi.
Ta có thể xây dựng một phương thức “StringBuilder” tương tự ở trong JS bằng cách dùng mảng để lưu chuỗi, thực hiện nối chuỗi bằng cách thêm phần tử vào mảng và chuyển thành chuỗi bằng cách dùng phương thức join.
let hello = ["Hello"]
hello.push(" world")
hello = hello.join("")
console.log(hello)Cách này có một giới hạn là nếu số lần nối chuỗi vượt quá kích thước tối đa của mảng ở trong JS (khoảng đến )2 thì ta cần phải lưu vào các buffer tạm và thực hiện merge các buffer khi kết thúc quá trình nối chuỗi.
Concatenate Between String and Number
Việc dùng toán tử + và - giữa một chuỗi và một số có một chút kỳ quặc, ví dụ:
console.log("10" + 5) // '105'
console.log(5 + "10") // '510'
console.log(10 - "5") // 5
console.log("5" - 10) // -5Có thể thấy, toán tử + sẽ ép kiểu số thành chuỗi và nối chuỗi, toán tử - sẽ ép kiểu chuỗi thành số và thực hiện phép tính trừ. Ngoài ra, toán tử * cũng ép chuỗi thành số rồi thực hiện phép nhân.
Long Literal String
Một chuỗi có thể là một dòng, nhiều dòng hoặc đoạn văn bản. Để viết giá trị chuỗi trên nhiều dòng, ta sử dụng dấu \ ở cuối mỗi dòng thể hiện rằng phía sau vẫn còn nội dung của chuỗi.
Chẳng hạn như:
let paragraph =
"Ngành IT Việt Nam hiện nay ở đầu của sự phát triển. \
Có thể nói IT là vua của các nghề. \
Vừa có tiền, có quyền. \
Vừa kiếm được nhiều $ lại được xã hội trọng vọng. \
Thằng em mình học bách khoa cơ khí, sinh năm 96. \
Tự mày mò học code rồi đi làm remote cho công ty Mỹ 2 năm nay. \
Mỗi tối online 3-4 giờ là xong việc. \
Lương tháng 3k6. \
Nhưng thu nhập chính vẫn là từ nhận các project bên ngoài làm thêm. \
Tuần làm 2,3 cái nhẹ nhàng 9,10k tiền tươi thóc thật không phải đóng thuế. \
Làm gần được 3 năm mà nhà xe nó đã mua đủ cả. Nghĩ mà thèm."
console.log(paragraph)Note
Lưu ý là output xuất ra console vẫn nằm trên một dòng.
Casting
Ta có một cách để chuyển chuỗi sang số dùng toán tử + như sau:
const someNumbers = "121"
console.log(typeof +someNumbers) // number
console.log(+someNumbers - 10) // 111Cũng có thể sử dụng hàm toString để chuyển số thuộc nhiều hệ cơ số khác nhau thành chuỗi.
console.log((11).toString()) // '11'
console.log((18).toString()) // '18'
console.log((17.3).toString()) // '17.3'
console.log((255).toString(16)) // 'ff'
console.log((128).toString(2)) // '10000000'Resources
Footnotes
-
xem thêm JS Data Types ↩
-
xem thêm RangeError: invalid array length ↩