Pengendali kesaksamaan yang manakah (== lwn ===) harus digunakan dalam perbandingan JavaScript?
P粉023650014
P粉023650014 2023-08-23 12:29:52
0
2
499
<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>
P粉023650014
P粉023650014

membalas semua(2)
P粉336536706

Gunakan operator == (Equal)

true == 1; //true, because 'true' is converted to 1 and then compared
"2" == 2;  //true, because "2" is converted to 2 and then compared

Gunakan operator === (Identiti)

true === 1; //false
"2" === 2;  //false

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.

P粉178894235

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           // true

Kes istimewa ialah apabila anda membandingkan primitif dengan objek yang menilai kepada primitif yang sama disebabkan oleh objek rentetan yang dicipta oleh toStringvalueOf 方法。例如,考虑将字符串基元与使用 String pembinanya.

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

Di sini == 运算符检查两个对象的值并返回 true,但是 === 看到它们类型不同并返回 false。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用 String Pembina mencipta objek rentetan daripada literal rentetan.

Rujukan
https://262.ecma-international.org/5.1/#sec-11.9 .3

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!