成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用JavaScript隱式類型轉(zhuǎn)換輸出"nb"

tomlingtm / 3335人閱讀

摘要:本文將介紹一段使用隱式類型轉(zhuǎn)換輸出的代碼,并講解具體的轉(zhuǎn)換過程。代碼轉(zhuǎn)換過程我們分四部分講解具體的轉(zhuǎn)換過程,一個(gè)空數(shù)組,緊跟在數(shù)組后面的的語義應(yīng)該是表示屬性操作,類似于中的作用,而不是表示數(shù)組。

本文將介紹一段使用JavaScript隱式類型轉(zhuǎn)換輸出"nb"的代碼,并講解具體的轉(zhuǎn)換過程。

預(yù)備知識(shí)

請(qǐng)先閱讀文章ECMAScript7規(guī)范中的ToPrimitive抽象操作。

代碼
([][[]]+[])[+!![]]+([]+{})[!+[]+!![]] // "nb"
轉(zhuǎn)換過程

我們分四部分講解具體的轉(zhuǎn)換過程:

([][[]]+[])

[+!![]]

([]+{})

[!+[]+!![]]

([][[]]+[])

[],一個(gè)空數(shù)組;

[[]],緊跟在數(shù)組后面的[的語義應(yīng)該是表示屬性操作,類似于obj[key][]的作用,而不是表示數(shù)組。這個(gè)里面,既然外層的[]表示獲取屬性的運(yùn)算符,里面的[]肯定就表示key了。因?yàn)?b>key是原始數(shù)據(jù)類型,所以會(huì)調(diào)用ToPrimitive抽象操作把[]轉(zhuǎn)化為原始數(shù)據(jù)類型,也就是空字符串"",所以上面兩個(gè)結(jié)合起來就是:

var a = []
var b = []
a[b] // => a[""] => undefined

+,相加操作;

[],空對(duì)象,和上面的步驟結(jié)合起來就是:

undefined + []

相加操作會(huì)把操作符兩邊的操作數(shù)通過ToPrimitive抽象操作轉(zhuǎn)化為原始數(shù)據(jù)類型,也就是[]會(huì)變?yōu)?b>"":

undefined + ""

相加操作的抽象步驟中,如果有一個(gè)操作數(shù)是字符串,會(huì)調(diào)用ToString抽象操作把兩個(gè)操作數(shù)都轉(zhuǎn)化為字符串類型,也就是:

undefined + "" // => "undefined" + "" => "undefined"

綜上,([][[]]+[])的結(jié)果就是字符串"undefined"。

[+!![]]

!![],表示把一個(gè)數(shù)據(jù)轉(zhuǎn)化為布爾類型,因?yàn)?b>[]是一個(gè)真值,所以!![]的結(jié)果是true;

+!![],表示把前面的結(jié)果轉(zhuǎn)化為數(shù)字類型,也就是+true,true轉(zhuǎn)化為數(shù)字是1,所以+!![]的結(jié)果是1;

[+!![]],也就是[1],結(jié)合第一部分([][[]]+[])的結(jié)果:

([][[]]+[])[+!![]] // => "undefined"[1] => 也就是獲取字符串"undefined"的第二個(gè)字符,也就是"n" => "n"

([]+{})

相加操作會(huì)調(diào)用ToPrimitive抽象操作把操作符兩邊的數(shù)據(jù)轉(zhuǎn)化為原始數(shù)據(jù)類型,也就是:

([]+{}) // => "" + "[object Object]" // => "[object Object]"
[!+[]+!![]]

+[],把數(shù)組轉(zhuǎn)化為數(shù)字:

+[] // => +"" => 0

!+[],也就是!0true;

!![]true;

!+[]+!![],也就是true + true,又是相加操作,因?yàn)椴僮鞣麅蛇叾际遣紶栴愋?,所以?huì)轉(zhuǎn)化為數(shù)字類型,也就是1 + 1,也就是2;

第三部分和第四部分的結(jié)果結(jié)合起來就是:

([]+{})[!+[]+!![]] // => "[object Object]"[2] => 也就是取字符串"[object Object]"的第三個(gè)字符,也就是"b" => "b"

第一二部分和第三四部分結(jié)合起來的結(jié)果就是:

([][[]]+[])[+!![]]+([]+{})[!+[]+!![]] // => "n" + "b" => "nb"
總結(jié)

希望大家看的開心!如果本文有什么錯(cuò)誤或者不嚴(yán)謹(jǐn)?shù)牡胤?,歡迎在評(píng)論區(qū)留言。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97601.html

相關(guān)文章

  • 解析JavaScript判斷兩個(gè)值相等的方法

      本篇文章主要是講述在JavaScript中判斷兩個(gè)值相等,不要認(rèn)為很簡(jiǎn)單,要注意的是在JavaScript中存在4種不同的相等邏輯?! CMAScript 是 JavaScript 的語言規(guī)范,在ECMAScript 規(guī)范中存在四種相等算法,如下圖所示:  上圖中每個(gè)依次寫下來,很多前端應(yīng)該熟悉嚴(yán)格相等和非嚴(yán)格相等,但對(duì)于同值零和同值卻不熟悉,現(xiàn)在就依次下面四種方法?! ⊥怠 ⊥盗恪 》?..

    3403771864 評(píng)論0 收藏0
  • JavaScript中讓x==1&&x==2&&x==3等式成立演示

      要是別人問您:如何讓 x 等于 1 且讓 x 等于 2 且讓 x 等于 3 的等式成立?  咋地,知道如何實(shí)現(xiàn)?想罵人有不  現(xiàn)在我們一起來分解思路:  我們先來講講寬松相等== 和嚴(yán)格相等 ===,這兩個(gè)都能用來判斷兩個(gè)值是否相等,但們明確上文提到的等于指的是哪一種,二者的區(qū)別看下:  (1) 這兩個(gè)基礎(chǔ)直接的區(qū)別:  (1.1) 不同類型間比較,== 比較轉(zhuǎn)化成同一類型后的值看值是否相等,...

    3403771864 評(píng)論0 收藏0
  • 從0開始構(gòu)建自己的前端知識(shí)體系-不要對(duì)"=="說不

    摘要:為了避免某些場(chǎng)景下的意外,甚至推崇直接使用來代替。使用了運(yùn)算符的一些規(guī)則,發(fā)生了類型轉(zhuǎn)換。按照以下規(guī)則轉(zhuǎn)換被傳遞參數(shù)直接返回直接返回直接返回直接返回直接返回返回一個(gè)對(duì)象的默認(rèn)值。 前言 類型轉(zhuǎn)換在各個(gè)語言中都存在,而在 JavaScript 中由于缺乏對(duì)其的了解而不慎在使用中經(jīng)常造成bug被人詬病。為了避免某些場(chǎng)景下的意外,甚至推崇直接使用 Strict Equality( === )...

    tianyu 評(píng)論0 收藏0
  • 資源編排工具-私有網(wǎng)絡(luò)下批量部署多臺(tái)云主機(jī)

    摘要:私有網(wǎng)絡(luò)下批量部署多臺(tái)云主機(jī)本篇目錄摘要摘要拓?fù)鋱D拓?fù)鋱D操作步驟操作步驟參考文獻(xiàn)參考文獻(xiàn)關(guān)鍵詞摘要云主機(jī)是構(gòu)建在云環(huán)境的彈性計(jì)算資源,是最為核心的服務(wù)。私有網(wǎng)絡(luò)下批量部署多臺(tái)云主機(jī)本篇目錄摘要拓?fù)鋱D操作步驟參考文獻(xiàn)關(guān)鍵詞:UHost,VPC,Subnet摘要云主機(jī)是構(gòu)建在云環(huán)境的彈性計(jì)算資源,是 UCloud 最為核心的服務(wù)。有些服務(wù),如彈性 IP、鏡像、云硬盤等必須與云主機(jī)結(jié)合后使用,另一...

    ernest.wang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<