Rumah > Soal Jawab > teks badan
P粉3365367062023-08-24 09:01:58
==
(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
===
(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粉1788942352023-08-24 00:58:02
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一个>,
@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 toString
或 valueOf
方法。例如,考虑将字符串基元与使用 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