国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JS 中 == 不檢查類型?不,你錯(cuò)了!

開發(fā) 前端
根據(jù) JavaScript 規(guī)范參考 ECMAScript 262 文檔,概述了 IsLooselyEqual算法 ,負(fù)責(zé)處理“==”操作。這里說明了涉及 14 個(gè)步驟的綜合過程。值得注意的是,這個(gè)過程大量涉及類型檢查,如涉及Type(x)的初始步驟所證明的那樣,并引入強(qiáng)制作為整個(gè)操作的重要方式。

Hello,大家好,我是 Sunday。

我們知道在 JS 中有兩種判斷相等的方式,即:== 和 ===。并且很多同學(xué)會(huì)認(rèn)為“==”運(yùn)算符(通常稱為“松散相等”或簡(jiǎn)稱“相等”)是不精準(zhǔn)的。

“==”不關(guān)心數(shù)據(jù)類型,只關(guān)心值。

例如如下代碼:

1 == '1' // true

而“===”運(yùn)算符,即“嚴(yán)格相等”,可以有效地驗(yàn)證操作數(shù)的值和類型:

1 === '1' // false

但是這種理解真的是完全正確的嗎?最近有一個(gè)同學(xué)在面試的時(shí)候被深入問到了這個(gè)問題,咱們來看一下:

“==”和“===” 的執(zhí)行邏輯

先說結(jié)論,其實(shí):“==”和“===”這兩個(gè)運(yùn)算符都優(yōu)先考慮數(shù)據(jù)類型,并在執(zhí)行各自的算法之前執(zhí)行類型檢查。事實(shí)上,即使是“==”運(yùn)算符在評(píng)估值之前也會(huì)驗(yàn)證類型。

根據(jù) JavaScript 規(guī)范參考 ECMAScript 262 文檔,概述了 IsLooselyEqual算法 ,負(fù)責(zé)處理“==”操作。這里說明了涉及 14 個(gè)步驟的綜合過程。值得注意的是,這個(gè)過程大量涉及類型檢查,如涉及Type(x)的初始步驟所證明的那樣,并引入強(qiáng)制作為整個(gè)操作的重要方式。

圖片圖片

下方描述為翻譯后的結(jié)果:

// 在線地址:https://262.ecma-international.org/14.0/?_gl=1*1ddd25w*_ga*MTAzMTk1MjUwNS4xNzA0MTgwNDk0*_ga_TDCK4DWEPP*MTcwNDE4MDQ5NC4xLjAuMTcwNDE4MDQ5NC4wLjAuMA..&_ga=2.72864531.1838071013.1704180495-1031952505.1704180494#sec-islooselyequal

7.2.14 松散相等 ( x, y )
抽象操作 IsLooselyEqual 接受參數(shù) x(ECMAScript 語(yǔ)言值)和 y(ECMAScript 語(yǔ)言值),并返回包含布爾值的正常完成或拋出完成。 它提供 == 運(yùn)算符的語(yǔ)義。 調(diào)用時(shí)它執(zhí)行以下步驟:

1. 如果 Type(x) 是 Type(y),則
A。 A。 返回 IsStrictlyEqual(x, y)。
2. 如果 x 為 null 并且 y 未定義,則返回 true。
3. 如果 x 未定義且 y 為 null,則返回 true。
4. 注意:此步驟已在 B.3.6.2 節(jié)中替換。
5. 如果 x 是數(shù)字且 y 是字符串,則返回! IsLooselyEqual(x, !ToNumber(y))。
6. 如果 x 是字符串且 y 是數(shù)字,則返回! IsLooselyEqual(!ToNumber(x), y)。
7. 如果 x 是 BigInt 并且 y 是 String,則
A。 令 n 為 StringToBigInt(y)。
b. 如果 n 未定義,則返回 false。
C。 返回 ! IsLooselyEqual(x, n)。
8. 如果 x 是 String 并且 y 是 BigInt,則返回! IsLooselyEqual(y, x)。
9. 如果 x 是布爾值,則返回! IsLooselyEqual(!ToNumber(x), y)。
10. 如果 y 是布爾值,則返回! IsLooselyEqual(x, !ToNumber(y))。
11. 如果 x 是字符串、數(shù)字、BigInt 或符號(hào)并且 y 是對(duì)象,則返回! IsLooselyEqual(x, ? ToPrimitive(y))。
12. 如果 x 是對(duì)象并且 y 是字符串、數(shù)字、BigInt 或符號(hào),則返回! IsLooselyEqual(? ToPrimitive(x), y)。
13. 如果 x 是 BigInt 并且 y 是 Number,或者如果 x 是 Number 并且 y 是 BigInt,則
A。 A。 如果 x 不是有限的或 y 不是有限的,則返回 false。
b. b. 如果 ?(x) = ?(y),則返回 true; 否則返回 false。
14. 返回 false。

強(qiáng)制轉(zhuǎn)換涉及將一種類型的值轉(zhuǎn)換為另一種類型,可以通過有意操作顯式轉(zhuǎn)換,也可以通過 JavaScript 機(jī)制隱式轉(zhuǎn)換,無需任何用戶干預(yù)。

另外一個(gè)有趣的方法,當(dāng)兩種類型匹配時(shí),將使用 IsStrictlyEqual 算法(步驟 1.a),該算法與“===”運(yùn)算符使用的算法完全相同。

圖片圖片

翻譯之后為:

// 在線地址:https://262.ecma-international.org/14.0/?_gl=1*1ddd25w*_ga*MTAzMTk1MjUwNS4xNzA0MTgwNDk0*_ga_TDCK4DWEPP*MTcwNDE4MDQ5NC4xLjAuMTcwNDE4MDQ5NC4wLjAuMA..&_ga=2.72864531.1838071013.1704180495-1031952505.1704180494#sec-isstrictlyequal

7.2.15 IsStrictlyEqual(x,y)
抽象操作 IsStrictlyEqual 接受參數(shù) x(ECMAScript 語(yǔ)言值)和 y(ECMAScript 語(yǔ)言值)并返回布爾值。 它提供 === 運(yùn)算符的語(yǔ)義。 調(diào)用時(shí)它執(zhí)行以下步驟:

1. 如果 Type(x) 不是 Type(y),則返回 false。
2. 如果 x 是一個(gè)數(shù)字,那么
A。 返回 Number::equal(x, y)。
3. 返回 SameValueNonNumber(x, y)。

讓我們深入研究 IsLooselyEqual的第五步(如果 x 是數(shù)字且 y 是字符串,則返回! IsLooselyEqual(x, !ToNumber(y))):

圖片圖片

根據(jù)提供的代碼片段:

1 == "1"  // true 
// x 是數(shù)字 (1) 
// y 是字符串 ("1")

此處,調(diào)用 ToNumber (y)函數(shù)時(shí)會(huì)發(fā)生隱式 強(qiáng)制轉(zhuǎn)換。此強(qiáng)制過程將值(y,即“1”)從其原始類型(在本例中為String)轉(zhuǎn)換為不同的類型(在本例中為Number)。在比較值之前,此步驟涉及類型檢查和強(qiáng)制,將兩個(gè)值對(duì)齊到同一類型(Number),從而實(shí)現(xiàn)兩個(gè)數(shù)字之間的直接比較。

1 == "1"  // true 

//步驟 1。
// -> 檢查兩種類型
// -> 兩種類型不同
// -> 執(zhí)行 IsLooselyEqual 的后續(xù)步驟

//步驟 2。   
// -> "1 " (String) 將變成 1 (Number) - 強(qiáng)制機(jī)制

//Step 3.   
// -> 將值 1(數(shù)字,從左側(cè))與值 1(數(shù)字,在右側(cè))進(jìn)行比較

在這種情況下,嚴(yán)格相等運(yùn)算符將返回 false,如前面提供的內(nèi)容所示。由于兩種類型不同,因此 === 會(huì)判定為 false:

1 === "1"  // false 

//步驟 1.   
// -> 檢查兩種類型
// -> 兩種類型不同
// -> 結(jié)束進(jìn)程,返回 false

總結(jié)

兩個(gè)比較運(yùn)算符都會(huì)檢查類型,但松散的相等運(yùn)算符(==) 需要執(zhí)行額外的步驟。

  • 它首先檢查比較值的類型,如果它們不同,則將它們對(duì)齊到相同類型(使用隱式強(qiáng)制)。
  • 然后繼續(xù)進(jìn)行值比較。 使用嚴(yán)格相等運(yùn)算符(===)時(shí),不涉及該額外步驟。在值不同的情況下,它直接返回 false。
責(zé)任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2022-05-24 08:31:05

C語(yǔ)言檢查數(shù)組

2023-11-04 16:26:18

C語(yǔ)言數(shù)組

2018-08-22 06:56:55

物聯(lián)網(wǎng)商業(yè)模式IOT

2024-11-14 11:39:10

Order注解接口

2025-07-24 06:49:54

2023-01-05 08:09:27

GroovyDSL?

2022-03-28 11:06:38

Nacos監(jiān)聽配置

2019-09-08 15:43:19

UbuntuLinuxIP地址

2023-06-13 18:24:26

TypeScriptJSDoc開發(fā)

2021-01-28 07:52:39

JS數(shù)組變量

2013-07-09 14:41:58

C動(dòng)態(tài)類型

2021-08-11 15:13:54

數(shù)字化

2016-04-01 10:08:33

youtubeappuber

2022-04-26 06:43:12

文檔TCPLinux

2023-01-06 08:06:52

Groovy類型擴(kuò)展

2021-11-12 05:33:45

WiFi輻射無線路由器

2011-07-11 14:36:05

JAVA

2024-01-05 07:46:15

JS克隆對(duì)象JSON

2023-06-14 07:23:57

打印文檔打印機(jī)

2021-06-09 07:55:19

Typescript類型檢查
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲精品国产免费| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产精品成久久久久三级| 欧美一级淫片007| 中文字幕av免费专区久久| 伊人久久亚洲美女图片| 69堂免费精品视频在线播放| 白天操夜夜操| 可以在线看黄的网站| 国产精品夜间视频香蕉| 亚洲欧美日韩精品久久亚洲区| 亚洲伊人色欲综合网| 国产成人午夜精品5599| 综合久久十次| 亚洲伊人影院| 超级白嫩亚洲国产第一| 一级视频在线观看| 老熟妇仑乱视频一区二区| 青青成人在线| 国产精品爽黄69| 久久久精品国产| 日韩欧美综合一区| 亚洲一区二区黄色| 国产片一区二区三区| 精品一区二区三区蜜桃| 伊人久久亚洲美女图片| 国产精品一线天粉嫩av| va天堂va亚洲va影视| 中文字幕免费高清电视剧网站在线观看| 日本午夜精品一区二区| 国产福利影院在线观看| 日韩高清专区| 黄色99视频| 亚洲欧美国产精品桃花| 国产v综合ⅴ日韩v欧美大片| 色综合久久悠悠| 97精品视频在线观看| av在线播放资源| 国产成人黄色片| 色乱码一区二区三在线看| 91精品中国老女人| 2021久久精品国产99国产精品| 亚洲视频第一页| 欧美一级二级在线观看| 亚洲不卡av一区二区三区| 成人夜色视频网站在线观看| 亚洲欧美视频| 国产一区二区三区四区老人| 欧美精品一区二区三区在线播放| 欧美日韩精品一区视频| 色天天综合色天天久久| 欧美日韩国产a| 日韩欧美国产综合| 亚洲男人天堂古典| 91成人精品网站| 日本一区二区不卡| 亚洲综合中文字幕68页| 日本在线成人一区二区| 色一情一乱一伦一区二区三欧美 | 在线成人动漫av| 成人日韩在线| 一二三四区在线观看| 撸视在线观看免费视频| 蜜桃视频免费网站| 亚洲色精品三区二区一区| 欧美激情 国产精品| 色一情一乱一乱一区91| 一区二区不卡在线视频 午夜欧美不卡'| 91久久偷偷做嫩草影院| 91青草视频久久| 国产精品尤物福利片在线观看| 欧美一区二区三区……| 97av视频在线| 欧洲成人在线观看| 欧美激情videos| 久久久久久久久91| 国内精品久久久久伊人av| 欧美巨大黑人极品精男| 久久夜色精品国产| 美女扒开尿口让男人操亚洲视频网站| 在线视频日韩精品| 日韩中文字幕国产| 欧美成人高清视频| 国产综合在线看| 欧美一级大胆视频| 国产精品视频成人| 国产精品丝袜久久久久久高清| 国产精品永久免费在线| 亚洲xxxx视频| 久久精品午夜一区二区福利| 久久国产精品 国产精品| 日本一区二区精品| 永久域名在线精品| 真实国产乱子伦对白视频| 男人添女人下部高潮视频在观看| 国产在线青青草| 成人免费网站视频www| 久草在线国产| 一二三中文字幕在线| 黄色的视频在线免费观看| 中文字幕在线免费| 黄色美女视频在线观看| 日韩三区免费| 福利欧美精品在线| 日韩免费av| 国产精品www994| 久久综合影视| 成人精品一区二区三区中文字幕| 国产三级三级三级精品8ⅰ区| 亚洲欧美日韩久久| 欧美最猛黑人xxxxx猛交| 日韩免费视频一区二区| 宅男66日本亚洲欧美视频| 高清亚洲成在人网站天堂| 成人免费视频97| 蜜桃麻豆www久久国产精品| 正在播放久久| www.超碰com| 一区二区成人| 大香伊人久久| 亚洲福利合集| 秋霞欧美视频| 日日夜夜精品视频免费| 懂色一区二区三区免费观看| 欧美国产日韩亚洲一区| 五月天激情综合| 精品福利一区二区三区免费视频| 久久精品国产视频| 国产精品自拍小视频| 欧美一级二级三级| 久久久999视频| 一个人免费视频www在线观看| 国产婷婷视频在线| 日韩午夜视频在线| 欧美高清视频手机在在线| 日韩精品五月天| 中文字幕欧美三区| 欧美精品一卡二卡| 欧美精品手机在线| 国产精品国产亚洲精品看不卡15| 成人免费a级片| 天海翼一区二区三区免费| av美女在线观看| 亚洲va久久久噜噜噜久久| 久久成人一区| 国产精品系列在线| 欧美一区二区三区啪啪| 欧美激情亚洲一区| 国产综合欧美在线看| 国产a级一级片| 99re在线视频| 国产美女视频一区二区| 国内自拍一区| 久久精品水蜜桃av综合天堂| 欧美日韩一区二区三区免费看| 日韩中文字幕在线观看| 91免费在线视频网站| 青青青青草视频| 久久久久国产精品嫩草影院| 亚洲精品一区三区三区在线观看| 日本激情一区| 粉嫩aⅴ一区二区三区四区| 精品久久久久人成| 精品国产欧美成人夜夜嗨| 91手机在线视频| 久章草在线视频| 国产原创在线观看| 一道在线中文一区二区三区| 免费av成人在线| 亚洲午夜精品网| 中文字幕在线亚洲| 国产成人免费观看| 亚洲最大综合网| 国模精品视频| 91精品观看| 国产午夜精品一区二区三区嫩草 | av一区二区三区| 日本国产一区二区| 久久91超碰青草是什么| 欧美亚洲另类久久综合| 麻豆电影传媒二区| 男人亚洲天堂| 日韩一区精品视频| 亚洲第一精品在线| 精品国产一区二区三区久久| 久久涩涩网站| 欧美承认网站| 亚洲高清影院| 日韩黄色小视频| 五月激情六月综合| 欧美激情在线播放| 日本一区二区三区四区五区六区| 欧美男男激情freegay| 91精品丝袜国产高跟在线| 毛片av一区二区| 在线观看日韩一区| 国产精品久久久久久久久久| 色欲av无码一区二区人妻| 阿v视频在线| 免费欧美日韩|