您好,登錄后才能下訂單哦!
本篇內容介紹了“JavaScript相等判斷怎么避坑”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
嚴格相等本質上是判斷一個值是否與自身相等,在比較前不進行隱式類型轉換。當被比較的兩個值類型相同,值也相同,且不是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
判斷比較的兩個值是否相等,在比較前會轉化為相同的類型,轉換類型后,和嚴格相等(===)比較規則一致。
比較規則(A/B) | undefined | null | Number | String | Boolean | Object |
---|---|---|---|---|---|---|
undefined | true | true | false | false | false | false |
null | true | true | false | false | false | false |
Number | false | false | A === B | toNumber(B)===A | toNumber(B)===A | toPrimetive(B) == A |
String | false | false | toNumber(A)===B | A===B | toNumber(A)===toNumber(B) | toPrimetive(B) == A |
Boolean | false | false | toNumber(A)===B | toNumber(A)===toNumber(B) | A===B | toPrimetive(B) == toNumber(A) |
Object | false | false | toPrimitive(A) == B | toPrimitive(A) == B | toPrimetive(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 == undefined
和document.all == null
均為true
嚴格相等和非嚴格相等比較可得:嚴格相等的結果更具預測性,且無需進行類型轉換,效率也更高
同值相等是用來判斷兩個值是否是同一個值,通過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
**與同值相等類似,認為+0和-0相等**
// 實現方案: 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相等判斷怎么避坑”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。