Pengendali kesaksamaan yang manakah (== lwn ===) harus digunakan dalam perbandingan JavaScript?
P粉023650014
2023-08-23 12:29:52
<p>Saya menggunakan JSLint untuk meneroka JavaScript dan ia mengembalikan banyak cadangan untuk menggantikan <code>==</code> (dua tanda sama) dengan <code>===</code> tanda sama) apabila melakukan operasi seperti membandingkan <kod>idSele_UNVEHtype.value.length == 0</code> </p>
<p>Adakah terdapat faedah prestasi untuk menggantikan <kod>==</kod> dengan <kod>===</kod>? </p>
<p>Sebarang peningkatan prestasi adalah dialu-alukan kerana terdapat banyak pengendali perbandingan. </p>
<p>Adakah terdapat peningkatan prestasi berbanding <kod>==</code> </p>
Gunakan operator
==(Equal)Gunakan operator
===(Identiti)Ini kerana pengendali kesamaan
==melakukan cast jenis, yang bermaksud penterjemah secara tersirat akan cuba menukar nilai sebelum membandingkan.Sebaliknya, pengendali identiti
===tidak melakukan pemaksaan jenis dan oleh itu tidak menukar nilai apabila membandingkan.Pengendali kesaksamaan yang ketat (
===) 的行为与抽象相等运算符 (==) adalah sama, kecuali tiada penukaran jenis dilakukan dan jenis mestilah sama untuk dianggap sama.Rujukan: Tutorial JavaScript: Operator Perbandingan
==运算符将在进行任何必要的类型转换后比较是否相等。===运算符不会进行转换,因此如果两个值不是同一类型,===将简单地返回假. Kedua-duanya sama laju.Petikan daripada karya hebat Douglas Crockford JavaScript: The Good Parts一个>,
Kemas kini
@Casebash dalam komen dan @Phillipe Laybaert jawapan tentang objek. Untuk objek,
==和===berkelakuan secara konsisten antara satu sama lain (kecuali dalam kes khas).var a = [1,2,3]; var b = [1,2,3]; var c = { x: 1, y: 2 }; var d = { x: 1, y: 2 }; var e = "text"; var f = "te" + "xt"; a == b // false a === b // false c == d // false c === d // false e == f // true e === f // trueKes istimewa ialah apabila anda membandingkan primitif dengan objek yang menilai kepada primitif yang sama disebabkan oleh objek rentetan yang dicipta oleh
toString或valueOf方法。例如,考虑将字符串基元与使用Stringpembinanya."abc" == new String("abc") // true "abc" === new String("abc") // falseDi sini
==运算符检查两个对象的值并返回true,但是===看到它们类型不同并返回false。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用StringPembina mencipta objek rentetan daripada literal rentetan.Rujukan
https://262.ecma-international.org/5.1/#sec-11.9 .3