Trong khi str1 và str2 trông giống nhau, sự so sánh của
javascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
4 đánh giá làjavascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
5. Làm thế nào mà có thể?Hãy cùng tìm hiểu chi tiết cách so sánh chính xác các chuỗi trong JavaScript. Trước khi bắt đầu, tôi sẽ giúp bạn làm quen với các thuật ngữ của grapheme (một đơn vị chữ viết) và ký tự kết hợp (ký tự chuyên biệt giúp thay đổi giao diện của ký tự cơ sở)
1. đồ thị là gì
Nhìn vào chuỗi sau đây, bạn có thể nói gì về nội dung của nó?
javascript
const str1 = 'café';
Bạn có thể dễ dàng nhận thấy nó có 4 chữ cái. chữ thường c, chữ thường a, chữ thường f và chữ thường e có nét
Cách người dùng nghĩ về một ký tự như một đơn vị viết được đặt tên là grapheme. Chuỗi ví dụ
javascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
6 chứa 4 biểu đồĐây là một định nghĩa chính thức của một grapheme
Grapheme là một đơn vị viết khác biệt tối thiểu trong ngữ cảnh của một hệ thống chữ viết cụ thể
Ok, điều đó thật thú vị, nhưng nó liên quan như thế nào đến việc so sánh an toàn các chuỗi?
Đặc biệt, có một bộ ký tự đặc biệt có tên là các ký tự kết hợp sửa đổi ký tự trước đó để tạo ra các biểu đồ mới. Hãy chi tiết kết hợp các nhân vật
2. ký tự kết hợp là gì
Ký tự kết hợp là ký tự áp dụng cho ký tự cơ sở tiền lệ để tạo biểu đồ
Ký tự kết hợp bao gồm dấu trọng âm, dấu phụ, điểm tiếng Do Thái, dấu nguyên âm tiếng Ả Rập và dấu chỉ
Ký tự kết hợp luôn yêu cầu một ký tự cơ sở được áp dụng cho. Bạn nên tránh hiển thị chúng bị cô lập
Ví dụ,
javascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
7 là một grapheme nguyên tử. Bạn có thể lấy một chữ thường e (ký tự cơ sở) và kết hợp nó với việc kết hợp dấu sắc ◌́ (ký tự kết hợp) để hiển thị biểu đồ. e + ◌́ = éjavascript
const e1 = 'e\u0301';
e1; // renders as "é"
trong đó
javascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
8 là ký tự kết hợp ◌́Tuy nhiên, lưu ý rằng cùng một
javascript
const str1 = 'café';
const str2 = 'café';
str1 === str2; // => false
7 có thể được biểu diễn theo một cách khác bằng cách sử dụng chữ e viết thường với ký tự cấp tính________số 8_______Mặc dù
javascript
const str1 = 'café';
0 vàjavascript
const str1 = 'café';
1 hiển thị cùng một biểu đồ, tuy nhiên, chúng là các giá trị chuỗi khác nhaujavascript
const e1 = 'e\u0301';
const e2 = 'é';
e1 === e2; // => false
3. So sánh an toàn các chuỗi
Hiểu rõ hơn về biểu đồ và kết hợp các ký tự, đây là một số quy tắc để so sánh chuỗi an toàn hơn trong JavaScript
Đầu tiên, bạn có thể an toàn khi so sánh các chuỗi chứa các ký tự từ (bao gồm các ký tự ASCII) bằng cách sử dụng các toán tử so sánh thông thường
javascript
const str1 = 'café';
2,javascript
const str1 = 'café';
3 hoặc hàm tiện íchjavascript
const str1 = 'café';
4javascript
const str1 = 'Hello!';
const str2 = 'Hello!';
str1 === str2; // => true
Cả str1 và str2 đều chứa các ký tự ASCII, vì vậy bạn có thể so sánh chúng một cách an toàn bằng các toán tử so sánh
Thứ hai, nếu bạn xử lý các ký tự phía trên Mặt phẳng đa ngôn ngữ cơ bản, bao gồm cả việc kết hợp các ký tự, thì bạn sẽ không an toàn khi so sánh các chuỗi bằng cách sử dụng
javascript
const str1 = 'café';
2,javascript
const str1 = 'café';
3 vàjavascript
const str1 = 'café';
4. Điều bạn cần làm thêm là chuẩn hóa các chuỗi được so sánhjavascript
const str1 = 'café';
const str2 = 'cafe\u0301'; // same as 'café'
str1 === str2; // => false
str1.normalize() === str2.normalize(); // => true
Nói một cách đơn giản, chuẩn hóa chuỗi làm cho các chuỗi tương đương chính tắc (
javascript
const e1 = 'e\u0301';
e1; // renders as "é"
0 vàjavascript
const e1 = 'e\u0301';
e1; // renders as "é"
1 tương đương vì chúng biểu thị cùng một biểu đồ) để có một biểu diễn duy nhất (cảjavascript
const e1 = 'e\u0301';
e1; // renders as "é"
0 vàjavascript
const e1 = 'e\u0301';
e1; // renders as "é"
1 đều được chuẩn hóa thành mộtjavascript
const e1 = 'e\u0301';
e1; // renders as "é"
0 duy nhất)4. Tóm lược
Bạn có thể so sánh trực tiếp các chuỗi một cách an toàn khi các ký tự của chúng đến từ Mặt phẳng đa ngôn ngữ cơ bản
Tuy nhiên, nếu các chuỗi có thể chứa các ký tự kết hợp, thì sẽ an toàn hơn nếu chuẩn hóa các chuỗi được so sánh thành cùng một dạng bằng cách sử dụng hàm
javascript
const e1 = 'e\u0301';
e1; // renders as "é"
5. Sau đó thực hiện so sánh trên các chuỗi chuẩn hóaThích bài viết?
đề xuất cải tiến
Bài đăng chất lượng vào hộp thư đến của bạn
Tôi thường xuyên xuất bản bài viết có chứa
- Các khái niệm JavaScript quan trọng được giải thích bằng các từ đơn giản
- Tổng quan về các tính năng JavaScript mới
- Cách sử dụng TypeScript và cách gõ
- Thiết kế phần mềm và thực hành mã hóa tốt
Đăng ký nhận bản tin của tôi để nhận chúng ngay trong hộp thư đến của bạn
Đặt muaTham gia cùng 6930 người đăng ký khác
Giới thiệu về Dmitri Pavlutin
Nhà văn và huấn luyện viên công nghệ. Thói quen hàng ngày của tôi bao gồm (nhưng không giới hạn) uống cà phê, viết mã, viết, huấn luyện, vượt qua sự nhàm chán 😉