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

資訊專欄INFORMATION COLUMN

簡單說 通過JS的隱式轉(zhuǎn)換,關(guān)鍵時刻救你一命

Forest10 / 3087人閱讀

摘要:說明在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。解釋相信我,這行代碼是簡單的,它并不復(fù)雜,我們先來分解一下這行代碼我們把這一行,分解成了行了。簡單說中的與方法簡單說與引發(fā)的思考

說明

JavaScript在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。
我們來看看這行代碼

(![]+[])[+!![]- -+!![]- -+!![]]+({}+[])[+!![]]+(![]+[])[+!![]- -+!![]- -+!![]]

這行代碼的結(jié)果可能出乎你的意料,看結(jié)果

結(jié)果居然是sos,這就是為什么會給文章這樣一個題目了,這行代碼看上去似乎是亂七八糟的,但是相信你看完這篇文章,一定能自己寫出這樣的代碼來。

解釋

相信我,這行代碼是簡單的,它并不復(fù)雜,我們先來分解一下這行代碼

(![]+[])[+!![]- -+!![]- -+!![]]   //s
+  
({}+[])[+!![]]                      //o
+                
(![]+[])[+!![]- -+!![]- -+!![]]   //s

我們把這一行,分解成了3行了。

先看第一行
(![]+[])[+!![]- -+!![]- -+!![]]
這行還能分成兩部分

(![]+[])        
[+!![]- -+!![]- -+!![]]

我們繼續(xù)看這分開的兩部分
(![]+[]) 看看這個是什么意思
友情提示:
[ ] 轉(zhuǎn)為布爾值是 true
[ ] 轉(zhuǎn)為字符串是 ""

如果想知道為什么,推薦看看下面的兩篇文章。
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法
簡單說 !![]==true 與 []==true 引發(fā)的思考

![ ] 就是false
(![]+[]) 會轉(zhuǎn)為這個樣子 (false+"") 結(jié)果就是"false",字符串類型的哦!

[+!![]- -+!![]- -+!![]]這個又是什么意思呢?
我們能看見 +!![] 這個東西是什么,居然出現(xiàn)了三次
+!![],!的優(yōu)先級最高,先算 !![ ],!![ ] 是對 [ ]進(jìn)行了布爾值的轉(zhuǎn)換,最后結(jié)果就是true,最后在往前面來個+,就成了+true 這樣,進(jìn)行隱式轉(zhuǎn)換,把true轉(zhuǎn)為數(shù)字,就是1,好了,+!![] 就是 1 的意思,我們用1來替換一下代碼,看看變成了什么樣子[1- -1 - -1],我相信大家都能算出這么簡單的正數(shù) 減 負(fù)數(shù) 減 負(fù)數(shù) 的結(jié)果來,所有最后的結(jié)果是[3]

好的,我們把第一行的這兩個部分放在一起看看 "false"[3],這下明顯了吧!字符串的第3個字符,這樣就有s了

繼續(xù)看第二行
({}+[]])[+!![]]
我們同樣拆成兩部分

({}+[]])
[+!![]]

第一部分 ({}+[])
( )里面的{},不是語法上的花括號,不是語句塊的意思,而是表示了一個空對象,這里相加的時候會調(diào)用對象的toString()方法,所以它會轉(zhuǎn)為"[object Object]",字符串類型的哦!
[ ],它同樣也會調(diào)用toString()方法,所以[ ],會轉(zhuǎn)為"",也就是一個空字符串。
這兩個結(jié)果放在一起就是"[object Object]"+"" ,最后結(jié)果是"[object Object]"

第二部分 [+!![]]
上面我們已經(jīng)知道+!![] 是 1 的意思,所以最后的結(jié)果就是[1]
好的,我們把第二行的這兩個部分放在一起看看"[object Object]"[1],這樣我們就看的很清楚了,o也有了

最后的第三行,和第一行一模一樣,好的我們用 + ,把這三行的結(jié)果拼接起來就是 "sos" 了。

總結(jié)

最后用張圖總結(jié)一下

相信現(xiàn)在,你應(yīng)該是理解上面的代碼了,寫這個代碼,也主要是想理解理解隱式轉(zhuǎn)換,題目是開玩笑的,希望大家永遠(yuǎn)不會真的遇到需要這樣的代碼的關(guān)鍵時刻。
最后推薦兩篇相關(guān)的文章,希望對大家有所幫助。
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法
簡單說 !![]==true 與 []==true 引發(fā)的思考

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

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

相關(guān)文章

  • 簡單 通過JS隱式轉(zhuǎn)換,關(guān)鍵時刻救你一命

    摘要:說明在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。解釋相信我,這行代碼是簡單的,它并不復(fù)雜,我們先來分解一下這行代碼我們把這一行,分解成了行了。簡單說中的與方法簡單說與引發(fā)的思考 說明 JavaScript在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。 我們來看看這行代碼 (![]+[])[+!![]- -+!!...

    fuyi501 評論0 收藏0
  • 簡單 通過JS隱式轉(zhuǎn)換關(guān)鍵時刻救你一命

    摘要:說明在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。解釋相信我,這行代碼是簡單的,它并不復(fù)雜,我們先來分解一下這行代碼我們把這一行,分解成了行了。簡單說中的與方法簡單說與引發(fā)的思考 說明 JavaScript在比較的時候,會進(jìn)行隱式轉(zhuǎn)換,你如果對隱式轉(zhuǎn)換不是特別熟悉,結(jié)果往往出乎你的意料。 我們來看看這行代碼 (![]+[])[+!![]- -+!!...

    geekidentity 評論0 收藏0
  • 簡單 !![]==true 與 []==true 引發(fā)的思考

    摘要:簡單說中的與方法我們一句一句的看結(jié)果是邏輯非,會將操作數(shù)的布爾值求反,而就是類型轉(zhuǎn)換,將對應(yīng)的類型轉(zhuǎn)換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數(shù)字和字符串。 說明 直接說出問題 !![] == true //結(jié)果是true [] == true //結(jié)果是false ![] == [] //結(jié)果是true 為什么會出現(xiàn)這種情...

    lbool 評論0 收藏0
  • 簡單 !![]==true 與 []==true 引發(fā)的思考

    摘要:簡單說中的與方法我們一句一句的看結(jié)果是邏輯非,會將操作數(shù)的布爾值求反,而就是類型轉(zhuǎn)換,將對應(yīng)的類型轉(zhuǎn)換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數(shù)字和字符串。 說明 直接說出問題 !![] == true //結(jié)果是true [] == true //結(jié)果是false ![] == [] //結(jié)果是true 為什么會出現(xiàn)這種情...

    gnehc 評論0 收藏0

發(fā)表評論

0條評論

Forest10

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<