91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript相等判斷怎么避坑

發布時間:2022-08-26 10:14:32 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

本篇內容介紹了“JavaScript相等判斷怎么避坑”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    JS中的相等性

    1、嚴格相等(===)

    嚴格相等本質上是判斷一個值是否與自身相等,在比較前不進行隱式類型轉換。當被比較的兩個值類型相同,值也相同,且不是Number類型時,這兩個值是全等的。當兩個值類型是Number時,我們需要注意NaN,NaN和NaN不相等,+0和-0全等,其余情況,只要值相等,就是全等的。

    NaN === NaN //false
    +0 === -0 // true
    undefined === undefined //true
    null === null //true
    undefined === null //false
    ({}) === {} //false
    3 === '3' //false
    3 === 3 //true
    true === true //true
    false === 0 //false

    2、非嚴格相等(抽象相等)(==)

    判斷比較的兩個值是否相等,在比較前會轉化為相同的類型,轉換類型后,和嚴格相等(===)比較規則一致。

    比較規則(A/B)undefinednullNumberStringBooleanObject
    undefinedtruetruefalsefalsefalsefalse
    nulltruetruefalsefalsefalsefalse
    NumberfalsefalseA === BtoNumber(B)===AtoNumber(B)===AtoPrimetive(B) == A
    StringfalsefalsetoNumber(A)===BA===BtoNumber(A)===toNumber(B)toPrimetive(B) == A
    BooleanfalsefalsetoNumber(A)===BtoNumber(A)===toNumber(B)A===BtoPrimetive(B) == toNumber(A)
    ObjectfalsefalsetoPrimitive(A) == BtoPrimitive(A) == BtoPrimetive(A) == toNumber(B)A===B
    null == undefined // true
    null == 0 // false
    null == '' // false
    null == 'null' //false
    null == false // false
    null == [] //false
    null == {} //false
    null == NaN //false
    undefined == 0 //false
    undefined == '' //false
    undefined == 'undefined' //false
    undefined == false //false
    undefined == [] //false
    undefined == {} //false
    undefined == NaN //false
    '' == 0 //true
    '' == false //true
    '' == [] //true
    '' == {} // false
    0 == false // true
    0 == [] // true
    0 == {} // false
    true == '1' //true
    true == 'true' //false
    true == 1 // true
    true == [] //false
    false == [] //true
    true == {} //false
    ([]) == [] //false
    ({}) == {} //false
    3 == '3'  //true
    NaN == NaN // false
    +0 == -0 // true

    總結規律可得: undefined和null認為值相等,但是當undefined和null與其他類型進行相等比較時,不進行隱式類型轉換,與其他的任何類型值都不相等,所有對象與undefined和null不相等,但是有個特例,如:document.all == undefineddocument.all == null均為true

    嚴格相等和非嚴格相等比較可得:嚴格相等的結果更具預測性,且無需進行類型轉換,效率也更高

    3、同值相等

    同值相等是用來判斷兩個值是否是同一個值,通過Object.is()來判斷,是es6新方法。有點類似于嚴格相等,不會對傳入的兩個參數值進行隱式類型轉換,但是與嚴格相等又不完全相同,在對待+0、-0以及NaN上不一致

    • 都是undefined

    • 都是null

    • 相同的兩個字符串

    • 都是true或者都是false

    • 引用值相同的兩個對象

    • 都是NaN

    • 都是不為NaN且不為0的值相同的數字

    • 都是+0或者都是-0

    Object.is(NaN, NaN) //true
    Object.is(NaN, 0 / 0) // true
    Object.is(+0, -0) // false
    Object.is(+0, +0) //true
    Object.is(undefined, undefined) //true
    Object.is(null, null) //true
    Object.is(undefined, null) //false
    Object.is({}, {}) //false
    Object.is(3, '3') //false
    Object.is(3, 3) //true
    Object.is(true, true) //false
    Object.is(false, 0) //false

    4、零值相等

    **與同值相等類似,認為+0和-0相等**

    Object.is()實現方案

    // 實現方案:
    Object.defineProperty(Object, "is", {
        value: function (x, y) {
            if (x === y) {
                // 需要區分一下+0和-0
                return x !== 0 || 1 / x === 1 / y
            } else {
                // 需要區分一下NaN
                return x !== x && y !== y
            }
        }
    })

    “JavaScript相等判斷怎么避坑”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    华亭县| 北川| 兴业县| 肇州县| 安泽县| 临西县| 绩溪县| 农安县| 泾阳县| 荣成市| 博乐市| 广丰县| 陇川县| 招远市| 永川市| 九台市| 会昌县| 富顺县| 青川县| 元谋县| 永登县| 衢州市| 公安县| 文登市| 邵武市| 营口市| 宁都县| 司法| 绿春县| 普定县| 定日县| 麻栗坡县| 遵义县| 岱山县| 墨竹工卡县| 榆树市| 吐鲁番市| 咸宁市| 板桥市| 丰县| 江川县|