Bạn có thể sử dụng == cho các chuỗi trong javascript không?

Trong khi str1str2 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 nhau

javascript

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 ích

javascript

const str1 = 'café';

4

javascript

const str1 = 'Hello!';

const str2 = 'Hello!';

str1 === str2; // => true

Cả str1str2 đề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ánh

javascript

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ột

javascript

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óa

Thí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 mua

Tham gia cùng 6930 người đăng ký khác

Bạn có thể sử dụng == cho các chuỗi trong javascript không?

Bạn có thể sử dụng == cho các chuỗi trong javascript không?

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 😉

Chúng ta có thể sử dụng == để so sánh các chuỗi trong JavaScript không?

Trong JavaScript, các chuỗi có thể được so sánh dựa trên thứ tự “giá trị”, “kiểu hoa chữ thường”, “độ dài” hoặc “bảng chữ cái” của chúng. Để so sánh các chuỗi dựa trên giá trị và kiểu chữ của chúng, hãy sử dụng Toán tử đẳng thức nghiêm ngặt (===) .

Bạn có thể sử dụng toán tử == với chuỗi không?

“==” trả về Boolean True nếu hai chuỗi giống nhau và trả về Boolean False nếu hai chuỗi không giống nhau. “. = ” toán tử trả về Boolean True nếu hai chuỗi không giống nhau và trả về Boolean False nếu hai chuỗi giống nhau.

Có thể sử dụng === để so sánh chuỗi không?

Có, === có thể so sánh hai chuỗi , cho kết quả đúng hoặc sai. Các ví dụ khác mà bạn đã thấy đang nói về việc so sánh các chuỗi khi sắp xếp danh sách của chúng.

== nghĩa là gì khi so sánh các chuỗi?

Toán tử == . Nếu hai chuỗi được so sánh với == đề cập đến cùng một bộ nhớ chuỗi, giá trị trả về là đúng; . an operator that returns true if the contents being compared refer to the same memory or false if they don't. If two strings compared with == refer to the same string memory, the return value is true; if not, it is false.