最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript相等判斷的避坑實(shí)戰(zhàn)指南

 更新時間:2022年08月25日 16:16:01   作者:夢想敲木魚  
JavaScript中的相等性判斷,在項目開發(fā)中,我經(jīng)常會遇到,今天我們一起探討下,下面這篇文章主要給大家介紹了關(guān)于JavaScript相等判斷的避坑實(shí)戰(zhàn)指南,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

JS中的相等性

1、嚴(yán)格相等(===)

嚴(yán)格相等本質(zhì)上是判斷一個值是否與自身相等,在比較前不進(jìn)行隱式類型轉(zhuǎn)換。當(dāng)被比較的兩個值類型相同,值也相同,且不是Number類型時,這兩個值是全等的。當(dāng)兩個值類型是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、非嚴(yán)格相等(抽象相等)(==)

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

比較規(guī)則(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

總結(jié)規(guī)律可得: undefined和null認(rèn)為值相等,但是當(dāng)undefined和null與其他類型進(jìn)行相等比較時,不進(jìn)行隱式類型轉(zhuǎn)換,與其他的任何類型值都不相等,所有對象與undefined和null不相等,但是有個特例,如:document.all == undefineddocument.all == null均為true

嚴(yán)格相等和非嚴(yán)格相等比較可得:嚴(yán)格相等的結(jié)果更具預(yù)測性,且無需進(jìn)行類型轉(zhuǎn)換,效率也更高

3、同值相等

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

  • 都是undefined
  • 都是null
  • 相同的兩個字符串
  • 都是true或者都是false
  • 引用值相同的兩個對象
  • 都是NaN
  • 都是不為NaN且不為0的值相同的數(shù)字
  • 都是+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、零值相等

**與同值相等類似,認(rèn)為+0和-0相等**

Object.is()實(shí)現(xiàn)方案

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

總結(jié)

到此這篇關(guān)于JavaScript相等判斷避坑的文章就介紹到這了,更多相關(guān)JavaScript相等判斷避坑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Bootstrap表格制作代碼

    Bootstrap表格制作代碼

    這篇文章主要為大家詳細(xì)介紹了Bootstrap表格的制作代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 用js簡單提供增刪改查接口

    用js簡單提供增刪改查接口

    這篇文章主要介紹了用js簡單提供增刪改查接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • javascript克隆元素樣式的實(shí)現(xiàn)代碼

    javascript克隆元素樣式的實(shí)現(xiàn)代碼

    這是一個實(shí)驗用的玩意,它可以克隆指定元素的最終樣式,并包裝成一個css類,它還可以證明Oprea 11.10 是個混球
    2011-10-10
  • 關(guān)于JavaScript數(shù)組去重的一些理解匯總

    關(guān)于JavaScript數(shù)組去重的一些理解匯總

    這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)組去重的一些理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • IE6-8中Date不支持toISOString的修復(fù)方法

    IE6-8中Date不支持toISOString的修復(fù)方法

    這篇文章主要介紹了IE6-8中Date不支持toISOString的修復(fù)方法,需要的朋友可以參考下
    2014-05-05
  • 前端精度丟失問題解決之后端Long類型到前端的處理策略

    前端精度丟失問題解決之后端Long類型到前端的處理策略

    這篇文章主要介紹了前端精度丟失問題解決之后端Long類型到前端的處理策略,在Web開發(fā)中前后端數(shù)據(jù)類型不匹配尤其是Long類型數(shù)據(jù)到前端可能導(dǎo)致精度丟失,文章探討了此問題并提供三種解決方法,需要的朋友可以參考下
    2024-09-09
  • 自己寫的Javascript計算時間差函數(shù)

    自己寫的Javascript計算時間差函數(shù)

    Javascript計算時間差函數(shù),獲得時間差,時間格式為 年-月-日 小時:分鐘:秒 或者 年/月/日 小時:分鐘:秒。
    2013-10-10
  • 關(guān)于layer.js使用心得-向彈出框傳值問題

    關(guān)于layer.js使用心得-向彈出框傳值問題

    這篇文章主要介紹了關(guān)于layer.js使用心得-向彈出框傳值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • js表單登陸驗證示例

    js表單登陸驗證示例

    這篇文章主要介紹了js表單登陸驗證的方法,基于thinkPHP前端頁面實(shí)現(xiàn)javascript針對表單用戶名與密碼的驗證功能,需要的朋友可以參考下
    2016-10-10
  • javascript中錯誤使用var造成undefined

    javascript中錯誤使用var造成undefined

    這篇文章主要介紹了javascript中錯誤使用var造成undefined的原因,實(shí)例分析了錯誤使用var造成undefined的過程,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論

祁连县| 台东市| 武陟县| 桐庐县| 武乡县| 乌什县| 攀枝花市| 巴彦县| 靖江市| 连州市| 镇坪县| 临桂县| 金昌市| 右玉县| 罗源县| 陵川县| 禹州市| 贞丰县| 平遥县| 西乌| 鄯善县| 宁明县| 凌云县| 苍山县| 吴旗县| 桑植县| 浦北县| 扬中市| 沂水县| 新营市| 宁德市| 莱阳市| 和田市| 通河县| 扶沟县| 双城市| 西乌珠穆沁旗| 辽中县| 新绛县| 夹江县| 买车|