搜尋

首頁  >  問答  >  主體

JavaScript 比較應使用哪一個等於運算子(== 與 ===)?

<p>我正在使用JSLint 來瀏覽JavaScript,它返回許多建議,將<code>==</code> (兩個等號)替換為<code>===</code> (三個等號)在執行諸如在<code>if</code> 語句內比較<code>idSele_UNVEHtype.value.length == 0</code> 等操作時。 </p> <p>將 <code>==</code> 替換為 <code>===</code> 是否有效能優勢? </p> <p>任何效能改進都會受到歡迎,因為有許多比較運算子。 </p> <p>如果不進行型別轉換,是否會比 <code>==</code> 獲得效能提升? </p>
P粉023650014P粉023650014457 天前577

全部回覆(2)我來回復

  • P粉336536706

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

    使用==運算子(相等

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

    使用===運算子(Identity

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

    這是因為相等運算子 == 會進行型別強制轉換,這表示解譯器會在比較之前隱式嘗試轉換值。

    另一方面,恆等運算子 === 不會進行型別強制,因此在比較時不會轉換值。

    回覆
    0
  • P粉178894235

    P粉1788942352023-08-24 00:58:02

    嚴格相等運算子(===) 的行為與抽象相等運算子(==) 相同,只是不進行型別轉換,且型別必須是相同的被認為是平等的。

    參考:JavaScript 教學:比較運算子

    #== 運算子將在進行任何必要的型別轉換後比較是否相等。 === 運算子不會進行轉換,因此如果兩個值不是相同類型,=== 將簡單地傳回。兩者都一樣快。

    引用 Douglas Crockford 的精彩內容JavaScript:好的部分,


    更新

    @Casebash 在評論和@Phillipe Laybaert 的 關於物件的答案。對於對象,===== 彼此行為一致(特殊情況除外)。

    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

    特殊情況是當您將一個基元與一個計算結果為相同基元的物件進行比較時,由於其 toStringvalueOf 方法。例如,考慮將字串基元與使用 String 建構函數建立的字串物件進行比較。

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

    這裡== 運算子檢查兩個物件的值並傳回true,但是=== 看到它們類型不同並傳回 false。哪一個是正確的?這實際上取決於您要比較的內容。我的建議是完全繞過這個問題,只是不要使用 String 建構子從字串文字建立字串物件。

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

    回覆
    0
  • 取消回覆