Rumah  >  Soal Jawab  >  teks badan

Pengendali kesaksamaan yang manakah (== lwn ===) harus digunakan dalam perbandingan JavaScript?

<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粉023650014P粉023650014444 hari yang lalu565

membalas semua(2)saya akan balas

  • P粉336536706

    P粉3365367062023-08-24 09:01:58

    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.

    balas
    0
  • P粉178894235

    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,


    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

    balas
    0
  • Batalbalas