Làm thế nào để bạn so sánh các mục trong javascript?
Lưu ý rằng sự khác biệt giữa tất cả những thứ này đều liên quan đến việc xử lý các nguyên mẫu của chúng; . Đối với bất kỳ đối tượng không nguyên thủy nào 9 và 0 có cấu trúc giống nhau nhưng bản thân chúng là các đối tượng riêng biệt, tất cả các dạng trên sẽ đánh giá là 0 Show
Bình đẳng nghiêm ngặt bằng cách sử dụng ===Bình đẳng nghiêm ngặt so sánh hai giá trị cho bình đẳng. Không có giá trị nào được chuyển đổi hoàn toàn sang một số giá trị khác trước khi được so sánh. Nếu các giá trị có các loại khác nhau, các giá trị được coi là không bằng nhau. Nếu các giá trị có cùng loại, không phải là số và có cùng giá trị thì chúng được coi là bằng nhau. Cuối cùng, nếu cả hai giá trị đều là số, thì chúng được coi là bằng nhau nếu cả hai đều không phải là 1 và có cùng giá trị hoặc nếu một là 3 và một là 2
Bình đẳng nghiêm ngặt hầu như luôn luôn là hoạt động so sánh chính xác để sử dụng. Đối với tất cả các giá trị ngoại trừ số, nó sử dụng ngữ nghĩa rõ ràng. một giá trị chỉ bằng chính nó. Đối với các số, nó sử dụng ngữ nghĩa hơi khác nhau để đánh bóng trên hai trường hợp cạnh khác nhau. Đầu tiên là số 0 dấu phẩy động được ký dương hoặc âm. Điều này rất hữu ích trong việc biểu diễn một số nghiệm toán học nhất định, nhưng vì hầu hết các tình huống không quan tâm đến sự khác biệt giữa 3 và 2, đẳng thức nghiêm ngặt coi chúng là cùng một giá trị. Thứ hai là dấu phẩy động bao gồm khái niệm về một giá trị không phải là số, 1, để biểu thị giải pháp cho một số vấn đề toán học không xác định. vô cực âm được thêm vào vô cực dương, ví dụ. Bình đẳng nghiêm ngặt coi 1 là không bình đẳng với mọi giá trị khác — bao gồm cả chính nó. (Trường hợp duy nhất mà 9 là 20 là khi 9 là 1. )Bên cạnh 63, đẳng thức nghiêm ngặt cũng được sử dụng bởi các phương pháp tìm chỉ mục mảng bao gồm khớp nối 24, 25, 26, 27 và 28. Điều này có nghĩa là bạn không thể sử dụng 29 để tìm chỉ mục của giá trị 1 trong một mảng hoặc sử dụng 1 làm giá trị 28 trong câu lệnh 43 và làm cho nó khớp với bất kỳ thứ gì
Bình đẳng lỏng lẻo sử dụng ==Bình đẳng lỏng lẻo là đối xứng. 44 luôn có ngữ nghĩa giống hệt với 45 đối với bất kỳ giá trị nào của 46 và 47 (ngoại trừ thứ tự chuyển đổi được áp dụng). Hành vi để thực hiện bình đẳng lỏng lẻo bằng cách sử dụng 64 như sau
Theo truyền thống và theo ECMAScript, tất cả các đối tượng và đối tượng nguyên thủy đều không bằng nhau đối với 634 và 633. Nhưng hầu hết các trình duyệt cho phép một lớp đối tượng rất hẹp (cụ thể là đối tượng 720 cho bất kỳ trang nào), trong một số ngữ cảnh, hoạt động như thể chúng mô phỏng giá trị 634. Bình đẳng lỏng lẻo là một trong những bối cảnh như vậy. 722 và 723 đánh giá là true nếu và chỉ khi A là một đối tượng mô phỏng 634. Trong tất cả các trường hợp khác, một đối tượng không bao giờ lỏng lẻo bằng 634 hoặc 633Trong hầu hết các trường hợp, việc sử dụng đẳng thức lỏng lẻo không được khuyến khích. Kết quả so sánh sử dụng đẳng thức nghiêm ngặt sẽ dễ dự đoán hơn và có thể đánh giá nhanh hơn do không có kiểu ép buộc Ví dụ sau đây minh họa các so sánh đẳng thức lỏng lẻo liên quan đến số nguyên thủy 727, nguyên hàm bigint 728, nguyên hàm chuỗi 729 và một đối tượng có giá trị 00 là 729
Đẳng thức lỏng lẻo chỉ được sử dụng bởi toán tử 64Đẳng thức cùng giá trị sử dụng Object. Là()Đẳng thức cùng giá trị xác định xem hai giá trị có chức năng giống hệt nhau trong mọi ngữ cảnh hay không. (Trường hợp sử dụng này thể hiện một ví dụ về nguyên tắc thay thế Liskov. ) Một trường hợp xảy ra khi một nỗ lực được thực hiện để thay đổi một thuộc tính không thể thay đổi
03 sẽ đưa ra một ngoại lệ khi cố gắng thay đổi một thuộc tính không thể thay đổi, nhưng sẽ không có tác dụng gì nếu không có thay đổi thực sự nào được yêu cầu. Nếu 04 là 2, không có thay đổi nào được yêu cầu và sẽ không có lỗi xảy ra. Trong nội bộ, khi một thuộc tính bất biến được xác định lại, giá trị mới được chỉ định được so sánh với giá trị hiện tại bằng cách sử dụng đẳng thức cùng giá trịĐẳng thức cùng giá trị được cung cấp bởi phương pháp 06. Nó được sử dụng ở hầu hết mọi nơi trong ngôn ngữ mà giá trị nhận dạng tương đương được mong đợiBình đẳng giá trị bằng khôngTương tự như đẳng thức cùng giá trị, nhưng +0 và -0 được coi là bằng nhau Đẳng thức cùng giá trị bằng 0 không được hiển thị dưới dạng API JavaScript, nhưng có thể được triển khai bằng mã tùy chỉnh 2Same-value-zero chỉ khác với đẳng thức nghiêm ngặt bằng cách coi 1 là tương đương và chỉ khác với đẳng thức cùng giá trị bằng cách coi 2 tương đương với 727. Điều này làm cho nó thường có hành vi hợp lý nhất trong quá trình tìm kiếm, đặc biệt là khi làm việc với 1. Nó được sử dụng bởi các phương pháp 11, 12, cũng như 13 và 14 để so sánh đẳng thức chínhSo sánh các phương pháp đẳng thứcMọi người thường so sánh số bằng gấp đôi và số bằng gấp ba bằng cách nói cái này là phiên bản "nâng cao" của cái kia. Ví dụ: double equals có thể được coi là phiên bản mở rộng của triple equals, bởi vì cái trước làm mọi thứ mà cái sau làm, nhưng với chuyển đổi kiểu trên toán hạng của nó - ví dụ: 15. Ngoài ra, có thể khẳng định rằng dấu bằng kép là cơ sở và dấu bằng ba là phiên bản nâng cao, bởi vì nó yêu cầu hai toán hạng phải cùng loại, do đó, nó bổ sung thêm một ràng buộcTuy nhiên, cách suy nghĩ này ngụ ý rằng các so sánh bình đẳng tạo thành một "quang phổ" một chiều trong đó "hoàn toàn nghiêm ngặt" nằm ở một đầu và "hoàn toàn lỏng lẻo" nằm ở đầu kia. Mô hình này không phù hợp với 06, bởi vì nó không "lỏng lẻo" hơn so với số bằng gấp đôi hoặc "chặt chẽ hơn" so với số bằng gấp ba, cũng như không phù hợp ở đâu đó ở giữa (i. e. , chặt chẽ hơn gấp đôi bằng, nhưng lỏng lẻo hơn gấp ba bằng). Chúng ta có thể thấy từ bảng so sánh sự giống nhau bên dưới rằng điều này là do cách mà 06 xử lý 1. Lưu ý rằng nếu 19 được đánh giá bằng 0, chúng ta có thể nói rằng nó phù hợp với phổ lỏng lẻo/nghiêm ngặt dưới dạng một dạng thậm chí còn chặt chẽ hơn của bộ ba bằng, một dạng phân biệt giữa 2 và 3. Việc xử lý 1 có nghĩa là điều này là không đúng sự thật, tuy nhiên. Thật không may, 06 phải được xem xét theo các đặc điểm cụ thể của nó, thay vì tính lỏng lẻo hoặc nghiêm ngặt của nó đối với các toán tử đẳng thứcxy 64 63 06 28 634 634 31 31 31 31 633 633 31 31 31 31 20 20 31 31 31 31 0 0 31 31 31 31 53 53 31 31 31 31 727 727 31 31 31 31 3 2 31 31 69 31 3 727 31 31 31 31 2 727 31 31 69 31 728 84 31 31 31 31 727 0 31 69 69 69 95 0 31 69 69 69 95 727 31 69 69 69 729 727 31 69 69 69 13 14___ Khi nào nên sử dụng đối tượng. is() so với ba bằngNói chung, hành vi đặc biệt của 06 đối với số 0 chỉ có thể được quan tâm khi theo đuổi một số sơ đồ lập trình meta nhất định, đặc biệt là liên quan đến các bộ mô tả thuộc tính, khi công việc của bạn mong muốn phản ánh một số đặc điểm của 03. Nếu trường hợp sử dụng của bạn không yêu cầu điều này, bạn nên tránh sử dụng 06 và thay vào đó sử dụng 63. Ngay cả khi các yêu cầu của bạn liên quan đến việc so sánh giữa hai giá trị 1 đánh giá với 20, nhìn chung, việc kiểm tra trường hợp đặc biệt của 1 (sử dụng phương pháp 92 có sẵn từ các phiên bản trước của ECMAScript) sẽ dễ dàng hơn so với việc tìm ra cách các tính toán xung quanh có thể ảnh hưởng đến Dưới đây là danh sách chưa đầy đủ các phương thức và toán tử tích hợp có thể gây ra sự khác biệt giữa 2 và 3 tự hiển thị trong mã của bạn 95 (phủ định đơn nguyên)Xem xét ví dụ sau 4Nếu 96 là 727 (hoặc tính thành 727), một 2 được đưa vào tại vị trí đó và truyền ra thành 00 01, 02, 03, 04Trong một số trường hợp, có thể đưa 2 vào một biểu thức dưới dạng giá trị trả về của các phương thức này ngay cả khi không tồn tại 2 dưới dạng một trong các tham số. Ví dụ: sử dụng 03 để nâng 08 lên lũy thừa của bất kỳ số mũ lẻ, âm nào sẽ đánh giá thành 2. Tham khảo tài liệu cho các phương pháp riêng lẻ 10, 11, 12, 13, 14, 15Có thể nhận được giá trị trả về 2 từ các phương thức này trong một số trường hợp khi tồn tại 2 dưới dạng một trong các tham số. e. g. , 18 đánh giá thành 2. Tham khảo tài liệu cho các phương pháp riêng lẻ 20, 21, 22Mỗi toán tử này sử dụng thuật toán ToInt32 trong nội bộ. Vì chỉ có một đại diện cho 0 trong loại số nguyên 32 bit bên trong, nên 2 sẽ không tồn tại một chuyến đi khứ hồi sau một phép toán nghịch đảo. e. g. , cả 24 và 25 đều đánh giá bằng 0Việc dựa vào 06 khi không tính đến chữ ký của các số 0 có thể gây nguy hiểm. Tất nhiên, khi mục đích là để phân biệt giữa 2 và 3, nó sẽ thực hiện chính xác những gì mong muốnbáo trước. Sự vật. là () và NaNĐặc tả 06 coi tất cả các trường hợp của 1 là cùng một đối tượng. Tuy nhiên, vì có sẵn các mảng đã nhập, nên chúng ta có thể có các biểu diễn dấu chấm động riêng biệt của 1 không hoạt động giống hệt nhau trong mọi ngữ cảnh. Ví dụ
Tôi có thể so sánh hai đối tượng trong JavaScript không?Mặc dù JavaScript không có giải pháp vượt trội để so sánh hai đối tượng , nhưng không có vấn đề gì khi so sánh hai chuỗi. Do đó, trong phương pháp này, chúng tôi chuyển đổi hai đối tượng của mình thành chuỗi bằng cách sử dụng JSON. stringify() và so sánh hai giá trị để xác định xem các đối tượng có sâu bằng nhau không.
== và === trong JavaScript là gì?Sự khác biệt chính giữa toán tử == và === trong javascript là toán tử == thực hiện chuyển đổi kiểu của toán hạng trước khi so sánh, trong khi toán tử === . .
Có bao nhiêu cách bạn có thể so sánh hai đối tượng trong JavaScript?JavaScript cung cấp 3 cách so sánh các giá trị. Toán tử đẳng thức nghiêm ngặt === Toán tử đẳng thức lỏng lẻo == Đối tượng. hàm is().
Là một chức năng để so sánh các đối tượng?So sánh các đối tượng thật dễ dàng, hãy sử dụng === hoặc Đối tượng. là() . Hàm này trả về true nếu chúng có cùng tham chiếu và false nếu chúng không. Một lần nữa, tôi xin nhấn mạnh, đó là so sánh các tham chiếu đến các đối tượng, không phải các khóa và giá trị của các đối tượng. Vì vậy, từ Ví dụ 3, Đối tượng. là(obj1,obj2); . |