Hướng dẫn why does javascript use === instead of ==? - tại sao javascript sử dụng === thay vì ==?
Toán tử bình đẳng nghiêm ngặt ( 4) hoạt động giống hệt với toán tử bình đẳng trừu tượng ( 5) ngoại trừ không có chuyển đổi loại nào được thực hiện và các loại phải giống nhau được coi là bằng nhau. Show
Tham khảo: Hướng dẫn JavaScript: Các toán tử so sánh Toán tử 5 sẽ so sánh với sự bình đẳng sau khi thực hiện bất kỳ chuyển đổi loại cần thiết nào. Toán tử 4 sẽ không thực hiện chuyển đổi, vì vậy nếu hai giá trị không cùng loại 4 sẽ đơn giản trả về 9. Cả hai đều nhanh chóng như nhau.not do the conversion, so if two values are not the same type 4 will simply return 9. Both are equally quick.Để trích dẫn JavaScript xuất sắc của Douglas Crockford: Những phần tốt,
Update:Một điểm tốt đã được đưa ra bởi @CaseBash trong các bình luận và trong câu trả lời của @phillipe Laybaert liên quan đến các đối tượng. Đối với các đối tượng, 5 và 4 hành động nhất quán với nhau (ngoại trừ trong một trường hợp đặc biệt).
Trường hợp đặc biệt là khi bạn so sánh nguyên thủy với một đối tượng đánh giá theo cùng một nguyên thủy, do phương pháp 4 hoặc 5 của nó. Ví dụ: xem xét việc so sánh một chuỗi nguyên thủy với một đối tượng chuỗi được tạo bằng hàm tạo 6.
Ở đây, toán tử 5 đang kiểm tra các giá trị của hai đối tượng và trả về 5, nhưng 4 đang thấy rằng chúng không phải là cùng loại và trả về 9. Cái nào đúng? Điều đó thực sự phụ thuộc vào những gì bạn đang cố gắng so sánh. Lời khuyên của tôi là bỏ qua hoàn toàn câu hỏi và chỉ không sử dụng hàm tạo 6 để tạo các đối tượng chuỗi từ các chuỗi chữ.Tài liệu tham khảo http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 Đã trả lời ngày 11 tháng 12 năm 2008 lúc 14:25Dec 11, 2008 at 14:25
Bill the Lizardbill the LizardBill the Lizard 391K207 Huy hiệu vàng558 Huy hiệu bạc867 Huy hiệu đồng207 gold badges558 silver badges867 bronze badges 6 Sử dụng toán tử 5 (Bình đẳng)
Sử dụng toán tử 4 (Nhận dạng)
Điều này là do toán tử bình đẳng 5 không ép buộc loại, có nghĩa là trình thông dịch đã ngầm cố gắng chuyển đổi các giá trị trước khi so sánh.equality operator 5 does type coercion, meaning that the interpreter implicitly tries to convert the values before comparing.Mặt khác, toán tử nhận dạng 4 không ép buộc loại và do đó không chuyển đổi các giá trị khi so sánh.identity operator 4 does not do type coercion, and thus does not convert the values when
comparing.1 Đây là một hình ảnh thú vị về sự so sánh bình đẳng giữa 5 và 4.Nguồn: https://github.com/dorey/javaScript-equality-Table (bản demo, bản demo thống nhất) (demo, unified demo) var a = { }; var b = { }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true 8Khi sử dụng 4 cho thử nghiệm bình đẳng JavaScript, mọi thứ đều như vậy. Không có gì được chuyển đổi trước khi được đánh giá.Nothing gets converted before being evaluated. var a = "12" + "3"; var b = "123"; alert(a === b); // returns true, because strings behave like value types 0Khi sử dụng 5 để kiểm tra bình đẳng JavaScript, một số chuyển đổi thú vị diễn ra.funky conversions take place.Tóm tắt sự bình đẳng trong JavaScriptSự kết luận:Luôn luôn sử dụng 5.
Mateen Ulhaq 22.2K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges Đã trả lời ngày 5 tháng 5 năm 2014 lúc 5:21May 5, 2014 at 5:21
SnagsnagSNag 17.1k10 Huy hiệu vàng50 Huy hiệu bạc65 Huy hiệu Đồng10 gold badges50 silver badges65 bronze badges 8 Trong câu trả lời ở đây, tôi đã không đọc bất cứ điều gì về ý nghĩa của bình đẳng. Một số người sẽ nói rằng 4 có nghĩa là bằng nhau và cùng loại, nhưng điều đó không thực sự đúng. Nó thực sự có nghĩa là cả hai toán hạng tham chiếu cùng một đối tượng hoặc trong trường hợp các loại giá trị, có cùng một giá trị.equal means. Some will say that 4 means equal and of
the same type, but that's not really true. It actually means that both operands reference the same object, or in case of value types, have the same value.Vì vậy, hãy lấy mã sau:
Tương tự ở đây:
Hoặc thậm chí:
Hành vi này không phải lúc nào cũng rõ ràng. Có nhiều câu chuyện hơn là bình đẳng và cùng loại. Quy tắc là: Đối với các loại giá trị (số): 5
returns true if 6 and 7 have the same value and are of the same typeĐối với các loại tham chiếu: 5 returns true if 6 and 7 reference the exact same objectĐối với các chuỗi: 5 returns true if 6 and 7 are both strings and contain the exact same charactersChuỗi: Trường hợp đặc biệt ...Chuỗi không phải là loại giá trị, nhưng trong JavaScript, chúng hoạt động như các loại giá trị, vì vậy chúng sẽ "bằng nhau" khi các ký tự trong chuỗi giống nhau và khi chúng có cùng độ dài (như được giải thích trong quy tắc thứ ba) Bây giờ nó trở nên thú vị:
Nhưng còn điều này thì sao?:
Tôi nghĩ rằng các chuỗi hoạt động như các loại giá trị? Chà, nó phụ thuộc vào người bạn hỏi ... trong trường hợp này A và B không giống nhau. 6 thuộc loại 5, trong khi 7 thuộc loại 7. Chỉ cần nhớ rằng việc tạo một đối tượng chuỗi bằng hàm tạo 6 tạo ra một thứ gì đó thuộc loại 5 hoạt động như một chuỗi hầu hết thời gian.
Đã trả lời ngày 5 tháng 6 năm 2009 lúc 19:11Jun 5, 2009 at 19:11
Philippe Leybaertphilippe LeybaertPhilippe Leybaert 165K31 Huy hiệu vàng210 Huy hiệu bạc222 Huy hiệu đồng31 gold badges210 silver badges222 bronze badges 0 Hãy để tôi thêm lời khuyên này: Nếu nghi ngờ, hãy đọc đặc điểm kỹ thuật! ECMA-262 là đặc điểm kỹ thuật cho ngôn ngữ kịch bản trong đó JavaScript là một phương ngữ. Tất nhiên trong thực tế, vấn đề quan trọng hơn là cách các trình duyệt quan trọng nhất hoạt động hơn là một định nghĩa bí truyền về cách xử lý một cái gì đó được cho là. Nhưng thật hữu ích khi hiểu tại sao chuỗi mới ("A")! == "A".new String("a") !== "a". Xin vui lòng cho tôi giải thích cách đọc thông số kỹ thuật để làm rõ câu hỏi này. Tôi thấy rằng trong chủ đề rất cũ này, không ai có câu trả lời cho hiệu ứng rất kỳ lạ. Vì vậy, nếu bạn có thể đọc một đặc điểm kỹ thuật, điều này sẽ giúp bạn trong nghề nghiệp của bạn rất nhiều. Đó là một kỹ năng có được. Vì vậy, hãy tiếp tục. Tìm kiếm tệp PDF cho === đưa tôi đến trang 56 của thông số kỹ thuật: 11.9.4. Các toán tử tương đương với toán tử (===) và sau khi lội qua thông số kỹ thuật mà tôi tìm thấy:11.9.4. The Strict Equals Operator ( === ), and after wading through the specificationalese I find:
Thú vị là bước 11. Có, chuỗi được coi là loại giá trị. Nhưng điều này không giải thích tại sao chuỗi mới ("A")! == "A". Chúng ta có trình duyệt không phù hợp với ECMA-262 không?new String("a") !== "a". Do we have a browser not conforming to ECMA-262? Không quá nhanh! Hãy kiểm tra các loại của toán hạng. Hãy thử nó cho chính mình bằng cách gói chúng trong typeof (). Tôi thấy rằng chuỗi mới ("A") là một đối tượng và bước 1 được sử dụng: trả về sai nếu các loại khác nhau.typeof(). I find that new String("a") is an object, and step 1 is used: return false if the types are different. Nếu bạn tự hỏi tại sao chuỗi mới ("A") không trả lại một chuỗi, làm thế nào về một số bài tập đọc một đặc điểm kỹ thuật? Chúc vui vẻ!new String("a") does not return a string, how about some exercise reading a specification? Have fun! Aidiakapi đã viết điều này trong một bình luận dưới đây:
Mới luôn trả về một đối tượng, ngay cả đối với các bộ xây dựng chuỗi, quá. Và than ôi! Các ngữ nghĩa giá trị cho các chuỗi (xem Bước 11) bị mất. always returns an Object, even for String constructors, too. And alas! The value semantics for strings (see step 11) is lost. Và điều này cuối cùng có nghĩa là: Chuỗi mới ("A")! == "A".new String("a") !== "a".
Đã trả lời ngày 28 tháng 11 năm 2009 lúc 18:18Nov 28, 2009 at 18:18
nalplynalplynalply 24.8K12 Huy hiệu vàng79 Huy hiệu bạc96 Huy hiệu Đồng12 gold badges79 silver badges96 bronze badges Tôi đã thử nghiệm điều này trong Firefox với Firebug bằng mã như thế này: 0và
1Kết quả của tôi (được thử nghiệm năm lần mỗi lần và tính trung bình): 2Vì vậy, tôi muốn nói rằng sự khác biệt nhỏ (đây là hơn 100000 lần lặp, hãy nhớ) là không đáng kể. Hiệu suất không phải là lý do để làm 4. Loại an toàn (tốt, an toàn như bạn sẽ nhận được trong JavaScript) và chất lượng mã là.isn't a reason to do 4. Type safety (well, as safe as you're going to get in JavaScript), and code quality is.
Kabirbaidhya 3.0643 Huy hiệu vàng33 Huy hiệu bạc53 Huy hiệu Đồng3 gold badges33 silver badges53 bronze badges Đã trả lời ngày 25 tháng 12 năm 2008 lúc 11:17Dec 25, 2008 at 11:17
Khăn quàng cổ SimonSimon Scarfe 9.1404 Huy hiệu vàng27 Huy hiệu bạc32 Huy hiệu Đồng4 gold badges27 silver badges32 bronze badges 3 Trong PHP và JavaScript, nó là một toán tử bình đẳng nghiêm ngặt. Có nghĩa là, nó sẽ so sánh cả loại và giá trị. Đã trả lời ngày 12 tháng 5 năm 2010 lúc 12:58May 12, 2010 at 12:58
ShikishikiShiki 16.6K7 Huy hiệu vàng31 Huy hiệu bạc33 Huy hiệu đồng7 gold badges31 silver badges33 bronze badges Trong JavaScript, nó có nghĩa là cùng một giá trị và loại. Ví dụ, 3nhưng 4
Đã trả lời ngày 12 tháng 5 năm 2010 lúc 12:58May 12, 2010 at 12:58
ShikishikiDimitar 16.6K7 Huy hiệu vàng31 Huy hiệu bạc33 Huy hiệu đồng2 gold badges19 silver badges28 bronze badges 0 Trong JavaScript, nó có nghĩa là cùng một giá trị và loại. Ví dụ, 5Đúng, điều đó đúng theo 5 Một chuỗi trống và số 0 là cùng một lúc.Và nó không kết thúc ở đó, đây là một cái khác: 5Mọi thứ trở nên thực sự kỳ lạ với các mảng. 6Sau đó, Weirder với String 7Nó trở nên tồi tệ hơn: Khi nào không bằng nhau? 8Hãy để tôi nói rằng một lần nữa: 9Và đây chỉ là những thứ điên rồ mà bạn có được với những người nguyên thủy. Đó là một cấp độ hoàn toàn mới điên rồ khi bạn sử dụng 5 với các đối tượng.Tại thời điểm này, bạn có thể tự hỏi ... Lý do tại sao điều này xảy ra? Vâng, vì không giống như "Triple Equals" ( 4) chỉ kiểm tra xem hai giá trị có giống nhau không. 5 thực hiện một loạt các thứ khác.whole bunch of other stuff.Nó có xử lý đặc biệt cho các chức năng, xử lý đặc biệt cho null, không xác định, chuỗi, bạn đặt tên cho nó. Nó trở nên khá lập dị. Trên thực tế, nếu bạn đã cố gắng viết một hàm thực hiện những gì 5, nó sẽ trông giống như thế này: 0Vì vậy, điều này có nghĩa là gì? Nó có nghĩa là 5 là phức tạp.Bởi vì nó phức tạp, thật khó để biết điều gì sẽ xảy ra khi bạn sử dụng nó. Điều đó có nghĩa là bạn có thể kết thúc với lỗi. Vì vậy, đạo đức của câu chuyện là ... Làm cho cuộc sống của bạn bớt phức tạp hơn. Sử dụng 4 thay vì 5.Kết thúc. Đã trả lời ngày 9 tháng 8 năm 2016 lúc 16:50Aug 9, 2016 at 16:50
Luis Perezluis PerezLuis Perez 27.1k10 Huy hiệu vàng78 Huy hiệu bạc80 Huy hiệu đồng10 gold badges78 silver badges80 bronze badges 1 Toán tử === được gọi là toán tử so sánh nghiêm ngặt, nó khác với toán tử ==.=== operator is called a strict comparison operator, it does differ from the == operator. Hãy lấy 2 vars a và b. Đối với "A == B" để đánh giá thành True A và B cần phải là cùng một giá trị."a == b" to evaluate to true a and b need to be the same value. Trong trường hợp của "A === B" A và B phải là cùng một giá trị và cũng cùng loại để đánh giá đúng."a === b" a and b must be the same value and also the same type for it to evaluate to true. Lấy ví dụ sau 1Tóm tắt; Sử dụng toán tử == có thể đánh giá thành true trong các tình huống mà bạn không muốn nó sử dụng toán tử === sẽ an toàn hơn.; using the == operator might evaluate to true in situations where you do not want it to so using the === operator would be safer. Trong kịch bản sử dụng 90%, bạn sẽ không quan trọng cái nào bạn sử dụng, nhưng thật tiện dụng khi biết sự khác biệt khi bạn có một số hành vi bất ngờ một ngày. Đã trả lời ngày 11 tháng 12 năm 2008 lúc 14:58Dec 11, 2008 at 14:58
Bác sĩ Jonesdoctor JonesDoctor Jones 20.7K12 Huy hiệu vàng75 Huy hiệu bạc98 Huy hiệu đồng12 gold badges75 silver badges98 bronze badges 0
true === 1; //false "2" === 2; //false 4 Kiểm tra cùng các cạnh bằng loại cũng như giá trị.Example: 2Ví dụ chung: 3Một ví dụ phổ biến khác: 4Nhiều lần một kiểm tra chưa được xác định sẽ tiện dụng vì bạn không quan tâm nếu giá trị là 14, 15, 03 hoặc 02
Đã trả lời ngày 12 tháng 5 năm 2010 lúc 12:58May 12, 2010 at 12:58
vsyncvsyncvsync 108K54 Huy hiệu vàng286 Huy hiệu bạc371 Huy hiệu Đồng54 gold badges286 silver badges371 bronze badges 0 Sơ đồ luồng thực thi JavaScript cho bình đẳng / so sánh nghiêm ngặt '===' Sơ đồ luồng thực thi JavaScript cho bình đẳng / so sánh không nghiêm ngặt '==' Đã trả lời ngày 5 tháng 9 năm 2015 lúc 13:53Sep 5, 2015 at 13:53
Samar Pandasamar PandaSamar Panda 3.9963 huy hiệu vàng24 Huy hiệu bạc32 Huy hiệu đồng3 gold badges24 silver badges32 bronze badges 0 JavaScript 4 so với 5.vs 5 . 5
Đã trả lời ngày 3 tháng 7 năm 2013 lúc 4:08Jul 3, 2013 at 4:08 0 Nó có nghĩa là bình đẳng mà không có loại ép buộc loại ép buộc có nghĩa là javascript không tự động chuyển đổi bất kỳ loại dữ liệu nào khác thành các loại dữ liệu chuỗiequality without type coercion type coercion means JavaScript do not automatically convert any other data types to string data types 6
Đã trả lời ngày 12 tháng 5 năm 2010 lúc 12:59May 12, 2010 at 12:59
Pop Catalinpop CatalinPop Catalin 60.3k22 Huy hiệu vàng88 Huy hiệu bạc113 Huy hiệu đồng22 gold badges88 silver badges113 bronze badges 0 Trong một kịch bản điển hình sẽ không có sự khác biệt về hiệu suất. Quan trọng hơn có thể là thực tế là hàng ngàn "===" là 1 & nbsp; KB nặng hơn hàng nghìn "==" :) Các trình cấu hình javascript có thể cho bạn biết nếu có sự khác biệt về hiệu suất trong trường hợp của bạn. Nhưng cá nhân tôi sẽ làm những gì jslint gợi ý. Khuyến nghị này không có vì các vấn đề về hiệu suất, mà bởi vì sự ép buộc loại có nghĩa là 20 là đúng.
Đã trả lời ngày 16 tháng 12 năm 2008 lúc 14:29Dec 16, 2008 at 14:29
ConstantinconstantinConstantin 26.9k10 Huy hiệu vàng59 Huy hiệu bạc79 Huy hiệu đồng10 gold badges59 silver badges79 bronze badges 0 Toán tử so sánh bằng nhau == là khó hiểu và nên tránh. Nếu bạn phải sống với nó, thì hãy nhớ 3 điều sau:HAVE TO live with it, then remember the following 3 things:
Bảng sự thật của toán tử bằng nhau trong JavaScript
** lạ: Lưu ý rằng bất kỳ hai giá trị nào trên cột đầu tiên không bằng nhau theo nghĩa đó. ** 7Đã trả lời ngày 16 tháng 9 năm 2011 lúc 14:25Sep 16, 2011 at 14:25
CuonghuytocuonghuytoCuongHuyTo 1.28313 Huy hiệu bạc19 Huy hiệu đồng13 silver badges19 bronze badges 0 Không có khả năng có bất kỳ sự khác biệt hiệu suất giữa hai hoạt động trong việc sử dụng của bạn. Không có chuyển đổi loại nào được thực hiện vì cả hai tham số đã cùng loại. Cả hai hoạt động sẽ có một so sánh loại theo sau là so sánh giá trị. Đã trả lời ngày 11 tháng 12 năm 2008 lúc 14:44Dec 11, 2008 at 14:44
SeanseanSean 2.2251 Huy hiệu vàng24 Huy hiệu bạc31 Huy hiệu đồng1 gold badge24 silver badges31 bronze badges 0 Đúng! Nó không thành vấn đề. It does matter. Toán tử 4 trong JavaScript Kiểm tra giá trị cũng như loại trong đó toán tử 5 chỉ kiểm tra giá trị (không chuyển đổi loại nếu cần).checks value as well as type where as 5 operator just
checks the value (does type conversion if required).Bạn có thể dễ dàng kiểm tra nó. Dán mã sau vào tệp HTML và mở nó trong trình duyệt 8Bạn sẽ nhận được 'sai' trong cảnh báo. Bây giờ sửa đổi phương thức 23 thành 24, bạn sẽ nhận được sự thật.false' in alert. Now modify the 23 method to 24 you will get true.Đã trả lời ngày 14 tháng 11 năm 2014 lúc 6:02Nov 14, 2014 at 6:02
Aniket Thakuraniket ThakurAniket Thakur 64.6K37 Huy hiệu vàng270 Huy hiệu bạc284 Huy hiệu đồng37 gold badges270 silver badges284 bronze badges 0 Đơn giản 5 có nghĩa là so sánh giữa các toán hạng với sự ép buộc loạicomparison between
operands with type coercionvà 4 có nghĩa là so sánh giữa các toán hạng mà không bị ép buộc loại.comparison between operands without type coercion.Loại cưỡng chế trong JavaScript có nghĩa là tự động chuyển đổi các loại dữ liệu sang các loại dữ liệu khác. Ví dụ: 9
Đã trả lời ngày 20 tháng 3 năm 2015 lúc 5:05Mar 20, 2015 at 5:05
AmitamitAmit 7979 Huy hiệu bạc15 Huy hiệu Đồng9 silver badges15 bronze badges Theo nguyên tắc thông thường, tôi thường sẽ sử dụng 4 thay vì 5 (và 1 thay vì 3).Lý do được giải thích trong các câu trả lời ở trên và Douglas Crockford khá rõ ràng về nó (JavaScript: phần tốt). Tuy nhiên, có một ngoại lệ duy nhất: 31 là một cách hiệu quả để kiểm tra 'là null hoặc không xác định':one single
exception: 31 is an efficient way to check for 'is null or undefined': 0Ví dụ, JQuery 1.9.1 sử dụng mẫu này 43 lần và trình kiểm tra cú pháp JSHINT thậm chí còn cung cấp tùy chọn thư giãn 32 vì lý do này.Từ hướng dẫn phong cách jQuery:
1Chỉnh sửa 2021-03: Ngày nay, hầu hết các trình duyệt đều hỗ trợ toán tử kết hợp Nullish ( 33) và nhiệm vụ không hợp lý 34, cho phép một cách ngắn gọn hơn để gán giá trị mặc định nếu một biến không xác định hoặc không xác định, ví dụ: 2có thể được viết như bất kỳ hình thức nào trong số này 3Đã trả lời ngày 27 tháng 4 năm 2013 lúc 14:15Apr 27, 2013 at 14:15
mar10mar10mar10 13.6K5 Huy hiệu vàng38 Huy hiệu bạc63 Huy hiệu Đồng5 gold badges38 silver badges63 bronze badges 1 Đó là một bài kiểm tra kiểm tra nghiêm ngặt. Đó là một điều tốt, đặc biệt là nếu bạn đang kiểm tra giữa 0 và false và null. Ví dụ: nếu bạn có: 4Then: 5Tất cả trả lại đúng và bạn có thể không muốn điều này. Chúng ta hãy giả sử bạn có một chức năng có thể trả về chỉ số 0 của một mảng hoặc sai khi thất bại. Nếu bạn kiểm tra với "==" Sai, bạn có thể nhận được kết quả khó hiểu. Vì vậy, với điều tương tự như trên, nhưng một bài kiểm tra nghiêm ngặt: 6
Đã trả lời ngày 12 tháng 5 năm 2010 lúc 13:19May 12, 2010 at 13:19
DanieldanielDaniel 8806 Huy hiệu bạc5 Huy hiệu Đồng6 silver badges5 bronze badges 1 Toán tử 4 Kiểm tra các giá trị cũng như các loại biến cho sự bình đẳng.Toán tử 5 Chỉ cần kiểm tra giá trị của các biến cho bình đẳng.
Alex Weitz 3.0124 Huy hiệu vàng32 Huy hiệu bạc 50 Huy hiệu Đồng4 gold badges32 silver badges50 bronze badges Đã trả lời ngày 12 tháng 5 năm 2010 lúc 13:03May 12, 2010 at 13:03
JSLINT đôi khi cung cấp cho bạn những lý do không thực tế để sửa đổi công cụ. 4 có hiệu suất chính xác như 5 nếu các loại đã giống nhau.Nó chỉ nhanh hơn khi các loại không giống nhau, trong trường hợp đó nó không cố gắng chuyển đổi các loại nhưng trực tiếp trả lại sai. Vì vậy, IMHO, JSLINT có thể được sử dụng để viết mã mới, nhưng nên tránh quá mức quá mức bằng mọi giá. Có nghĩa là, không có lý do gì để thay đổi 5 thành 4 trong một kiểm tra như 41 khi bạn biết nó thực tế rằng một chỉ có thể là một chuỗi.Sửa đổi rất nhiều mã đó để lãng phí thời gian của các nhà phát triển và không đạt được.
Alex Weitz 3.0124 Huy hiệu vàng32 Huy hiệu bạc 50 Huy hiệu Đồng4 gold badges32 silver badges50 bronze badges Đã trả lời ngày 12 tháng 5 năm 2010 lúc 13:03Jun 5, 2012 at 7:53
JSLINT đôi khi cung cấp cho bạn những lý do không thực tế để sửa đổi công cụ. 4 có hiệu suất chính xác như 5 nếu các loại đã giống nhau.ashesNó chỉ nhanh hơn khi các loại không giống nhau, trong trường hợp đó nó không cố gắng chuyển đổi các loại nhưng trực tiếp trả lại sai.1 gold badge6 silver badges9 bronze badges 1 Vì vậy, IMHO, JSLINT có thể được sử dụng để viết mã mới, nhưng nên tránh quá mức quá mức bằng mọi giá. 7
Có nghĩa là, không có lý do gì để thay đổi 5 thành 4 trong một kiểm tra như 41 khi bạn biết nó thực tế rằng một chỉ có thể là một chuỗi.May 14, 2015 at 14:45
Sửa đổi rất nhiều mã đó để lãng phí thời gian của các nhà phát triển và không đạt được.Vikas Đã trả lời ngày 5 tháng 6 năm 2012 lúc 7:531 gold badge33 silver badges39 bronze badges Tro tàn 6111 Huy hiệu vàng6 Huy hiệu bạc9 Huy hiệu đồng 8Một ví dụ đơn giản là Đã trả lời ngày 14 tháng 5 năm 2015 lúc 14:45 VikasvikasSep 9, 2013 at 8:31
4.1931 Huy hiệu vàng33 Huy hiệu bạc39 Huy hiệu đồngHarry He 2 câu trả lời hàng đầu được đề cập == có nghĩa là bình đẳng và === có nghĩa là danh tính. Thật không may, tuyên bố này là không chính xác.16 silver badges12 bronze badges Nếu cả hai toán hạng của == là đối tượng, thì chúng được so sánh để xem chúng có phải là cùng một đối tượng không. Nếu cả hai toán tử chỉ vào cùng một đối tượng, thì toán tử bằng nhau sẽ trả về true. Nếu không, cả hai không bằng nhau. 9Trong mã ở trên, cả hai == và === Nhận sai vì A và B không phải là cùng một đối tượng. 0Điều nào rõ ràng trong thời gian chạy thực hiện những điều không xác định ... Google để chuyển đổi ngầm trong C ++ và STL để có được một số đối số chống lại nó ...
Đã trả lời ngày 29 tháng 12 năm 2008 lúc 11:54Dec 29, 2008 at 11:54
Thomas Hansenthomas HansenThomas Hansen 5.5231 Huy hiệu vàng22 Huy hiệu bạc28 Huy hiệu đồng1 gold badge22 silver badges28 bronze badges 1 Từ tham chiếu JavaScript cốt lõi 4 Trả về
Đã trả lời ngày 12 tháng 5 năm 2010 lúc 12:59May 12, 2010 at 12:59
Paul Butcherpaul ButcherPaul Butcher 6.82427 Huy hiệu bạc39 Huy hiệu đồng27 silver badges39 bronze badges So sánh bình đẳng: Nhà điều hành 5Trả về đúng, khi cả hai toán hạng đều bằng nhau. Các toán hạng được chuyển đổi thành cùng loại trước khi được so sánh. 1Bình đẳng và so sánh loại: Nhà điều hành 4Trả về true nếu cả hai toán hạng đều bằng nhau và cùng loại. Nói chung sẽ tốt hơn và an toàn hơn nếu bạn so sánh theo cách này, bởi vì không có chuyển đổi kiểu hậu trường. 2Đã trả lời ngày 2 tháng 10 năm 2013 lúc 21:54Oct 2, 2013 at 21:54
user2601995user2601995user2601995 6.0958 Huy hiệu vàng36 Huy hiệu bạc41 Huy hiệu đồng8 gold badges36 silver badges41 bronze badges Dưới đây là một bảng so sánh tiện dụng cho thấy các chuyển đổi xảy ra và sự khác biệt giữa 5 và 4.Như kết luận nêu rõ:
http://dorey.github.io/JavaScript-Equality-Table/
Bonifacio2 3.0684 Huy hiệu vàng33 Huy hiệu bạc49 Huy hiệu đồng4 gold badges33 silver badges49 bronze badges Đã trả lời ngày 27 tháng 3 năm 2014 lúc 0:18Mar 27, 2014 at 0:18
null và không xác định là hư vô, nghĩa là, 3Ở đây 6 và 7 không có giá trị. Trong khi đó, 0, sai và '' tất cả đều là các giá trị. Một điều phổ biến là tất cả những điều này là tất cả chúng đều là những giá trị giả, điều đó có nghĩa là tất cả chúng đều thỏa mãn các điều kiện giả.satisfy falsy conditions.Vì vậy, 0, sai và '' cùng nhau tạo thành một nhóm phụ. Và mặt khác, Null & không xác định tạo thành nhóm phụ thứ hai. Kiểm tra các so sánh trong hình ảnh dưới đây. null và không xác định sẽ bằng nhau. Ba người kia sẽ bằng nhau. Nhưng, tất cả đều được coi là điều kiện giả trong JavaScript. Điều này giống như bất kỳ đối tượng nào (như {}, mảng, v.v.), chuỗi không trống & boolean true là tất cả các điều kiện sự thật. Nhưng, tất cả họ không bình đẳng. Tại sao chúng ta sử dụng === thay vì ==?Sử dụng === Nếu bạn muốn so sánh một vài thứ trong JavaScript, nó được gọi là bình đẳng nghiêm ngặt, điều đó có nghĩa là điều này sẽ trả về đúng nếu chỉ có cả loại và giá trị giống nhau, vì vậy sẽ không có bất kỳ loại điều chỉnh không mong muốn nào cho bạn, nếu Bạn sử dụng ==, về cơ bản bạn không quan tâm đến loại hình và trong nhiều trường hợp bạn có thể gặp phải ...if you want to compare couple of things in JavaScript, it's called strict equality, it means this will return true if only both type and value are the same, so there wouldn't be any unwanted type correction for you, if you using == , you basically don't care about the type and in many cases you could face ...
Tại sao chúng ta sử dụng == và === trong JavaScript?Toán tử bình đẳng nghiêm ngặt (===) kiểm tra xem hai toán hạng của nó có bằng nhau hay không, trả về kết quả boolean. Không giống như toán tử bình đẳng, toán tử bình đẳng nghiêm ngặt luôn coi các hoạt động của các loại khác nhau là khác nhau.checks whether its two operands are equal, returning a Boolean result. Unlike the equality operator, the strict equality operator always considers operands of different types to be different.
Bạn nên sử dụng === hoặc ==?Toán tử == sẽ so sánh với sự bình đẳng sau khi thực hiện bất kỳ chuyển đổi loại cần thiết nào.Toán tử === sẽ không thực hiện chuyển đổi, vì vậy nếu hai giá trị không giống nhau === sẽ đơn giản trả về sai.Cả hai đều nhanh chóng như nhau.. The === operator will not do the conversion, so if two values are not the same type === will simply return false . Both are equally quick.
Tại sao JavaScript sử dụng 3 dấu hiệu bằng nhau?Triple bằng dấu bằng JavaScript có nghĩa là sự bình đẳng của không có loại coersion.Điều đó có nghĩa là, loại và giá trị phải bằng nhau.Lấy ví dụ kịch bản trong đó 0 là sai.Nếu chúng ta so sánh cùng 0 và sai với ===, chúng ta đã trả lại sai.equality without type coersion”. That means, the type and values must both be equal. Take for example the scenario where 0 is false. If we compare the same 0 and false with ===, we have false returned. |