欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js為什么[]==![]是成立的嗎

 更新時(shí)間:2023年01月31日 14:35:47   作者:在下月亮有何貴干  
本文主要介紹了js為什么[]==![]是成立的嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

js是一門(mén)弱類(lèi)型的語(yǔ)言,它的強(qiáng)制類(lèi)型轉(zhuǎn)換的迷惑性也被人詬病,例如標(biāo)題提到的一個(gè)小例子,我想可能很難再找到其他的語(yǔ)言,允許我們覺(jué)到一個(gè)值似乎既為真也為假。

其實(shí)現(xiàn)在規(guī)范更推薦js開(kāi)發(fā)者們避免使用 == 這種會(huì)產(chǎn)生強(qiáng)制類(lèi)型轉(zhuǎn)換的語(yǔ)法,大家盡可能會(huì)用 === 來(lái)代替,我在工作中也確實(shí)如此。

這里涉及到強(qiáng)制類(lèi)型轉(zhuǎn)換的問(wèn)題,由于js的類(lèi)型設(shè)計(jì)如此,它并不是難用,而是容易出現(xiàn)讓人難以理解的內(nèi)容,所以被很多人詬病。其實(shí)遇到任何問(wèn)題,第一時(shí)間不應(yīng)該是回避,而是應(yīng)該試著去了解它,理解了也就不會(huì)迷惑了。

我想你也想解除一下自己的迷惑吧?本文就來(lái)給介紹一下關(guān)于==的類(lèi)型轉(zhuǎn)換問(wèn)題。

== 與 === 的區(qū)別

這時(shí)候,如果你有經(jīng)驗(yàn),你肯定會(huì)說(shuō):這個(gè)我知道,== 只判斷值,=== 會(huì)同時(shí)判斷值和類(lèi)型

這么理解也許可以,但是嚴(yán)格來(lái)說(shuō),這句話不夠準(zhǔn)確,真正的區(qū)別應(yīng)該是:== 在比較兩個(gè)不同類(lèi)型的值時(shí)會(huì)發(fā)生強(qiáng)制類(lèi)型轉(zhuǎn)換,而 === 不會(huì)

強(qiáng)制類(lèi)型轉(zhuǎn)換

然后怎么轉(zhuǎn)換呢?記一下以下幾點(diǎn)就完了。

前置條件是兩者類(lèi)型不同,

  1. 兩者如果是表達(dá)式,先計(jì)算表達(dá)式。
  2. 兩者中有一個(gè)是對(duì)象類(lèi)型,則該對(duì)象類(lèi)型執(zhí)行ToPrimitive后再進(jìn)行比較。
  3. 兩者都是基本類(lèi)型,判斷類(lèi)型是否相同,不同,則同時(shí)執(zhí)行ToNumber后再比較。
  4. 特殊情況,null == underfined,兩者在 == 比較中只與對(duì)方和自己本身相等。

ToPimitive:執(zhí)行該對(duì)象的valueOf函數(shù),如果結(jié)果為基本類(lèi)型則直接返回,否則返回該對(duì)象的toString函數(shù)的執(zhí)行結(jié)果。

ToNumber:轉(zhuǎn)化為數(shù)字類(lèi)型。

例子

ok,知道了以上的內(nèi)容,我們來(lái)看看[]==![]發(fā)生了什么。

[] == ![] // 右邊是表達(dá)式,先進(jìn)行計(jì)算,[]的boolean值為true,所以![]則為false

// ???

[] == false // 右邊是基本類(lèi)型,左邊則是數(shù)組(對(duì)象類(lèi)型),因此對(duì)左側(cè)執(zhí)行ToPrimitive

// ???

// ToPrimitive執(zhí)行過(guò)程
[].valueOf() // 結(jié)果為[],valueOf返回的仍然是原數(shù)組對(duì)象,非基本類(lèi)型,執(zhí)行ToString
[].toString() // 結(jié)果為空字符串'',為字符串基本類(lèi)型,返回

'' == false // 兩邊都為基本類(lèi)型,類(lèi)型仍然不同,兩邊同時(shí)執(zhí)行ToNumber

// ???

// 兩邊同時(shí)ToNumber轉(zhuǎn)化為數(shù)字類(lèi)型
Number('') // 0
Number(false) // 0

0 == 0 // true

哈哈哈,雖然很扯淡,但是結(jié)果就是這樣的。

練習(xí)

試試,根據(jù)上方學(xué)習(xí)到的知識(shí),能不能?chē)L試讓自己理解以下的等式為什么是true呢?

console.log('0' == false) // true
console.log(0 == false) // true
console.log('' == false) // true
console.log([] == false) // true
console.log('' == 0) // true
console.log('' == []) // true
console.log(0 == []) // true

特殊情況undefined==null

雖然兩者都是基本類(lèi)型,可是遇到它們時(shí)要特殊處理,不可以使用Number進(jìn)行轉(zhuǎn)換,兩者在==中只與彼此和自身相等,因此進(jìn)行上方步驟判斷時(shí),不要忘了遇到null和undefined,不要再繼續(xù)轉(zhuǎn)換了。

而且根據(jù)這個(gè)特殊性質(zhì),當(dāng)我們需要判斷一個(gè)值為undefined或者null時(shí),完全可以簡(jiǎn)化判斷,這不是很好嗎?

if (res === undefined || res === null) {
? ? // ...
}

// 等同于
if (res == null) {
? ? // ...
}

尾言

本文介紹了==的強(qiáng)制類(lèi)型轉(zhuǎn)換,雖然我知道這在工作中實(shí)用性不大,哈哈哈,不過(guò)就當(dāng)是滿足一下自己的求知欲吧。更多相關(guān)js []==![]內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實(shí)現(xiàn)購(gòu)物車(chē)商品數(shù)量加減

    js實(shí)現(xiàn)購(gòu)物車(chē)商品數(shù)量加減

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)購(gòu)物車(chē)商品數(shù)量加減,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JS事件循環(huán)機(jī)制event loop宏任務(wù)微任務(wù)原理解析

    JS事件循環(huán)機(jī)制event loop宏任務(wù)微任務(wù)原理解析

    這篇文章主要介紹了JS事件循環(huán)機(jī)制event loop宏任務(wù)微任務(wù)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • JavaScript this 深入理解

    JavaScript this 深入理解

    一直以來(lái),對(duì)于JavaScript 中的this的理解都是很模糊的, 特別是對(duì)函數(shù)進(jìn)行apply 與 call 調(diào)用。這兩個(gè)操作如果沒(méi)有很好的理解 JavaScript中this的概念,會(huì)越搞越迷糊。
    2009-07-07
  • 學(xué)習(xí)RxJS之JavaScript框架Cycle.js

    學(xué)習(xí)RxJS之JavaScript框架Cycle.js

    這篇文章主要介紹了學(xué)習(xí)RxJS之JavaScript框架Cycle.js ,它是一個(gè)極簡(jiǎn)的JavaScript框架(核心部分加上注釋125行),提供了一種函數(shù)式,響應(yīng)式的人機(jī)交互接口,需要的朋友可以參考下
    2019-06-06
  • layui數(shù)據(jù)表格重載實(shí)現(xiàn)往后臺(tái)傳參

    layui數(shù)據(jù)表格重載實(shí)現(xiàn)往后臺(tái)傳參

    今天小編就為大家分享一篇layui數(shù)據(jù)表格重載實(shí)現(xiàn)往后臺(tái)傳參,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 淺談JS數(shù)組內(nèi)置遍歷方法有哪些和區(qū)別

    淺談JS數(shù)組內(nèi)置遍歷方法有哪些和區(qū)別

    本文主要介紹了淺談JS數(shù)組內(nèi)置遍歷方法有哪些和區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • uni-app和原生小程序混合開(kāi)發(fā)的具體實(shí)現(xiàn)過(guò)程

    uni-app和原生小程序混合開(kāi)發(fā)的具體實(shí)現(xiàn)過(guò)程

    最近項(xiàng)目中遇到了一些功能需要與原生進(jìn)行混合開(kāi)發(fā),所以下面這篇文章主要給大家介紹了關(guān)于uni-app和原生小程序混合開(kāi)發(fā)的具體實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下
    2022-07-07
  • javascript中使用new與不使用實(shí)例化對(duì)象的區(qū)別

    javascript中使用new與不使用實(shí)例化對(duì)象的區(qū)別

    這篇文章主要介紹了javascript中使用new與不使用實(shí)例化對(duì)象的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • Js apply方法詳解

    Js apply方法詳解

    本文主要介紹了Js apply方法的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 關(guān)于base64編碼和解碼的js工具函數(shù)

    關(guān)于base64編碼和解碼的js工具函數(shù)

    這篇文章主要介紹了關(guān)于base64編碼和解碼的js工具函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論