Cách chính xác để kiểm tra sự bình đẳng giữa các chuỗi trong JavaScript là gì?
Khi được hỏi ngày 27 tháng 8 năm 2010 lúc 17:37Aug 27, 2010 at 17:37
8
Luôn luôn cho đến khi bạn hoàn toàn hiểu được sự khác biệt và ý nghĩa của việc sử dụng các toán tử new String("a") == new String("a") 2 và new String("a") == new String("a") 3, hãy sử dụng toán tử new String("a") == new String("a") 3 vì nó sẽ cứu bạn khỏi các lỗi và WTF tối nghĩa (không quá khó tính). Toán tử new String("a") == new String("a") 2 "thông thường" có thể có kết quả rất bất ngờ do tính toán loại bên trong, do đó, sử dụng new String("a") == new String("a") 3 luôn là cách tiếp cận được khuyến nghị.
Để hiểu rõ hơn về điều này, và các phần "tốt so với xấu" khác của JavaScript đọc về ông Douglas Crockford và công việc của ông. Có một cuộc nói chuyện tuyệt vời của Google Tech, nơi anh ấy tóm tắt rất nhiều thông tin tốt: //www.youtube.com/watch?v=hqvtijbzook
Update:
Sê -ri Bạn không biết JS của Kyle Simpson là tuyệt vời (và miễn phí đọc trực tuyến). Loạt phim đi vào các khu vực thường bị hiểu lầm của ngôn ngữ và giải thích "phần xấu" mà Crockford gợi ý bạn tránh. Bằng cách hiểu chúng, bạn có thể sử dụng chúng đúng cách và tránh những cạm bẫy.
Cuốn sách "Up & Go" bao gồm một phần về bình đẳng, với bản tóm tắt cụ thể này về thời điểm sử dụng các toán tử lỏng lẻo (new String("a") == new String("a") 2) so với các toán tử nghiêm ngặt (new String("a") == new String("a") 3):
Để đun sôi rất nhiều chi tiết cho một vài điều đơn giản và giúp bạn biết nên sử dụng new String("a") == new String("a") 2 hay new String("a") == new String("a") 3 trong các tình huống khác nhau, đây là các quy tắc đơn giản của tôi:
- Nếu một trong hai giá trị (còn gọi là bên) trong một so sánh có thể là giá trị new String("a").valueOf() == new String("a").valueOf() 1 hoặc new String("a").valueOf() == new String("a").valueOf() 2, hãy tránh new String("a") == new String("a") 2 và sử dụng new String("a") == new String("a") 3.
- Nếu một trong hai giá trị trong một so sánh có thể là của các giá trị cụ thể này (new String("a").valueOf() == new String("a").valueOf() 5, new String("a").valueOf() == new String("a").valueOf() 6 hoặc new String("a").valueOf() == new String("a").valueOf() 7 - mảng trống), hãy tránh new String("a") == new String("a") 2 và sử dụng new String("a") == new String("a") 3.
- Trong tất cả các trường hợp khác, bạn an toàn khi sử dụng new String("a") == new String("a") 2. Nó không chỉ an toàn, mà trong nhiều trường hợp, nó đơn giản hóa mã của bạn theo cách cải thiện khả năng đọc.
Tôi vẫn giới thiệu cuộc nói chuyện của Crockford cho các nhà phát triển, những người không muốn đầu tư thời gian để thực sự hiểu JavaScript, đó là lời khuyên tốt cho một nhà phát triển chỉ thỉnh thoảng làm việc trong JavaScript.
Đã trả lời ngày 27 tháng 8 năm 2010 lúc 17:39Aug 27, 2010 at 17:39
StwstwSTW
43.7K17 Huy hiệu vàng106 Huy hiệu bạc159 Huy hiệu đồng17 gold badges106 silver badges159 bronze badges
18
Nếu bạn biết chúng là chuỗi, thì không cần phải kiểm tra loại.
"a" == "b"Tuy nhiên, lưu ý rằng các đối tượng chuỗi sẽ không bằng nhau.
new String("a") == new String("a")sẽ trả về sai.
Gọi phương thức valueOf () để chuyển đổi nó thành nguyên thủy cho các đối tượng chuỗi,
new String("a").valueOf() == new String("a").valueOf()sẽ trả về đúng
Đã trả lời ngày 27 tháng 8 năm 2010 lúc 17:40Aug 27, 2010 at 17:40
AnuraganuragAnurag
139K36 Huy hiệu vàng220 Huy hiệu bạc257 Huy hiệu Đồng36 gold badges220 silver badges257 bronze badges
6
Chỉ một bổ sung cho câu trả lời: nếu tất cả các phương thức này trả về sai, ngay cả khi các chuỗi có vẻ bằng nhau, có thể có một khoảng trắng ở bên trái và hoặc phải của một chuỗi. Vì vậy, chỉ cần đặt một if(s1.trim() === s2.trim()) { // your code } 1 ở cuối chuỗi trước khi so sánh:
if(s1.trim() === s2.trim()) { // your code }Tôi đã mất hàng giờ cố gắng tìm ra những gì sai. Hy vọng điều này sẽ giúp ích cho ai đó!
Đã trả lời ngày 2 tháng 5 năm 2017 lúc 13:41May 2, 2017 at 13:41
Akelecakelecakelec
3.5973 Huy hiệu vàng41 Huy hiệu bạc38 Huy hiệu Đồng3 gold badges41 silver badges38 bronze badges
8
Bạn có thể sử dụng new String("a") == new String("a") 2 hoặc new String("a") == new String("a") 3 nhưng lần cuối cùng hoạt động theo cách đơn giản hơn (SRC)
a == B (và phủ định của nó! =) (and its negation !=)
A === B (và phủ định của nó! ==) (and its negation !==)
Đã trả lời ngày 3 tháng 8 năm 2020 lúc 19:44Aug 3, 2020 at 19:44
Kamil Kiełczewskikamil KiełczewskiKamil Kiełczewski
77.5K27 Huy hiệu vàng341 Huy hiệu bạc319 Huy hiệu đồng27 gold badges341 silver badges319 bronze badges
5
Điều dẫn tôi đến câu hỏi này là if(s1.trim() === s2.trim()) { // your code } 4 và if(s1.trim() === s2.trim()) { // your code } 5
Kiểm tra trường hợp của tôi
if (title === "LastName") doSomething();và tiêu đề là if(s1.trim() === s2.trim()) { // your code } 6
var title = $(this).text().trim();Vì vậy, có lẽ bạn phải sử dụng chức năng if(s1.trim() === s2.trim()) { // your code } 7 như thế này
Đã trả lời ngày 27 tháng 7 năm 2016 lúc 10:52Jul 27, 2016 at 10:52
1
Thực tế có hai cách trong đó các chuỗi có thể được thực hiện trong JavaScript.
if(s1.trim() === s2.trim()) { // your code } 8 Điều này tạo ra một giá trị chuỗi nguyên thủy.
if(s1.trim() === s2.trim()) { // your code } 9 Điều này tạo ra một đối tượng trình bao bọc loại if (title === "LastName") doSomething(); 0.
if (title === "LastName") doSomething(); 1 if (title === "LastName") doSomething(); 2
if (title === "LastName") doSomething(); 2
Vì vậy, cách tốt nhất để kiểm tra bình đẳng là sử dụng toán tử new String("a") == new String("a") 3 vì nó kiểm tra giá trị cũng như loại của cả hai toán hạng.
Nếu bạn muốn kiểm tra sự bình đẳng giữa hai đối tượng thì sử dụng if (title === "LastName") doSomething(); 4 là cách chính xác.
new String('javascript').valueOf() == new String('javascript').valueOf()Đã trả lời ngày 2 tháng 5 năm 2015 lúc 19:11May 2, 2015 at 19:11
AbhishekabhishekAbhishek
1.1961 Huy hiệu vàng8 Huy hiệu bạc12 Huy hiệu đồng1 gold badge8 silver badges12 bronze badges
Chuỗi if (title === "LastName") doSomething(); 5 có thể được kiểm tra bằng thủ thuật if (title === "LastName") doSomething(); 6.
var me = new String("me"); var you = new String("me"); var isEquel = JSON.stringify(me) === JSON.stringify(you); console.log(isEquel);
Dunc
17.8K6 Huy hiệu vàng83 Huy hiệu bạc99 Huy hiệu Đồng6 gold badges83 silver badges99 bronze badges
Đã trả lời ngày 4 tháng 7 năm 2018 lúc 12:33Jul 4, 2018 at 12:33
Muhammad Usmanmuhammad UsmanMuhammad Usman
7951 Huy hiệu vàng10 Huy hiệu bạc18 Huy hiệu đồng1 gold badge10 silver badges18 bronze badges
2
So sánh nghiêm ngặt
Để thực hiện so sánh đơn giản, hãy sử dụng new String("a") == new String("a") 3 để kiểm tra sự bình đẳng nghiêm ngặt. Như những người khác đã nói, điều này có lợi thế là hiệu quả nhất và giảm cơ hội của mã lỗi hoặc mã không chắc chắn. Nguồn: MDN Web Docs: Bình đẳng nghiêm ngặt.new String("a") == new String("a") 3 to check for strict equality. As others stated, this has the advantages of being most efficient and reducing the chances of buggy or uncertain code. Source: MDN Web Docs: Strict Equality.
var a = "hello1"; var b = "hello2"; console.log("a === a?" + (a === a) + "|"); console.log("a === b?" + (a === b) + "|");
So sánh theo thứ tự chữ cái
Nếu bạn muốn so sánh hai chuỗi để biết một chuỗi có đến trước hay sau một chuỗi khác, dựa trên việc sắp xếp tự nhiên, hãy sử dụng các toán tử if (title === "LastName") doSomething(); 8, if (title === "LastName") doSomething(); 9, var title = $(this).text().trim(); 0 và var title = $(this).text().trim(); 1. Nguồn: MDN WebDocs cho if (title === "LastName") doSomething(); 8, if (title === "LastName") doSomething(); 9, var title = $(this).text().trim(); 0 và var title = $(this).text().trim(); 1.
var a = "hello1"; var b = "hello2"; console.log("a < a?" + (a < a) + "|"); console.log("a < b?" + (a < b) + "|"); console.log("a > b?" + (a > b) + "|"); console.log("b > a?" + (b > a) + "|");
Đã trả lời ngày 26 tháng 5 năm 2021 lúc 15:47May 26, 2021 at 15:47
HoldoffhungerHolderoffhungerHoldOffHunger
Phim thương hiệu vàng 17K893 Huy hiệu bạc124 Huy hiệu đồng8 gold badges93 silver badges124 bronze badges
Xem xét rằng cả hai chuỗi có thể rất lớn, có 2 cách tiếp cận chính var title = $(this).text().trim(); 6 và var title = $(this).text().trim(); 7
Tôi đã đề xuất chức năng này
new String("a") == new String("a") 0Đã trả lời ngày 25 tháng 2 năm 2020 lúc 10:25Feb 25, 2020 at 10:25
NagibabanagibabaNagibaba
3,5041 Huy hiệu vàng31 Huy hiệu bạc39 Huy hiệu đồng1 gold badge31 silver badges39 bronze badges
Đối với các chuỗi, chúng tôi có một phương pháp được hỗ trợ var title = $(this).text().trim(); 8 rất tiện dụng trong so sánh chuỗi. IMO, chúng ta chỉ nên sử dụng nó và không cần phải làm phức tạp công cụ.
Usage:
new String("a") == new String("a") 1Đã trả lời ngày 7 tháng 8 lúc 8:17Aug 7 at 8:17
Cũng xem xét rằng var title = $(this).text().trim(); 9.
Đã trả lời ngày 19 tháng 4 lúc 20:09Apr 19 at 20:09
grssnbchrgrssnbchrgrssnbchr
2.8356 Huy hiệu vàng35 Huy hiệu bạc69 Huy hiệu Đồng6 gold badges35 silver badges69 bronze badges