一行能裝逼的JavaScript程式碼的延伸
前段就是坑,入坑水真深。 先看看一個黑科技, 納尼,這是什麼東西。
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
貼入瀏覽器執行一看,你個XX,你給老子等著。。。。。。。
然並卵。
作為一般的青年就此笑過, 可是我不是一般的青年,我是二到無窮的青年。你給老子講清楚你這sb怎麼出來的.
在一行能裝逼的JavaScript程式碼講得灰常清晰和明白,但是個人覺得還可以補充和擴充套件,於是就有了這篇文章。
解析出這個SB還是先懂幾個東西:
- 運算子的優先順序
一行能裝逼的JavaScript程式碼裡面有解釋,
這段裝逼程式碼裡面用的只有 ! () ~ + [] — *
優先順序別 [] () — ~ ! * + - JS型別轉換
一行能裝逼的JavaScript程式碼裡面有解釋
減號-,乘號*,肯定是進行數學運算,所以運算元需轉化為number型別
加號+,可能是字串拼接,也可能是數學運算,所以可能會轉化為number或string
一元運算,如+[],只有一個運算元的,轉化為number型別
關於轉換順序
嘗試使用ToPrimitive,轉換為原始型別,
轉換成功,返回值。
否則呼叫valueOf,如果返回是原始型別,返回
否則呼叫toString(),如果返回原型型別,返回
否則,丟擲異常 - 一些特殊情況的加法
[] + [] // ``
[] + {} // `[object Object]`
{} + [] // 0
({} + []) // `[object Object]`
{} + {} // NaN
({} + {}) // `[object Object][object Object]`
{} + []中的第一個{}會被識別為程式碼塊,被忽略掉,
+[]轉換過程
[] 不是原始型別,呼叫valueOf
[].valueOf() 返回的依舊不是原始型別
[].toString() 返回””,
+””結果為0
({}+[])這裡面 {} + [] 是作為表示式執行的,
{}最終轉換為 “[object object]”
[]最終轉換為 “”
相加為 “[object object]”
好,準備好這些只是之後,我們就可以來解讀裝逼,為了方便解讀,
我寫出每一步的解讀, 來,一起裝逼,一起飛。
const results = [
`(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// +[] ==> 0
`(!(~0)+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// ~0 ==> -1 取反減1
`(!(-1)+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// !(-1) ==> false
`(false+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// false+{} ==> "false[object object]"
`"false[object object]"[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// +"" ==> 0
`"false[object object]"[--[~0][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// ~0 ==> -1
`"false[object object]"[--[-1][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// +[] ==> 0
`"false[object object]"[--[-1][0]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// +[] ==> 0
`"false[object object]"[--[-1][0]*[~0] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// ~0 ==> -1
`"false[object object]"[--[-1][0]*[-1] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// --[-1][0] ==> -2
`"false[object object]"[-2*[-1] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// [-1] ==> "-1"
`"false[object object]"[-2*"-1" + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// "-1" ==> 1
`"false[object object]"[-2*-1 + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// -2*-1 ==> 2
`"false[object object]"[2 + ~~!+[]]+({}+[])[[~!+[]]*~+[]]`,
// +[] ==> 0
`"false[object object]"[2 + ~~!0]+({}+[])[[~!+[]]*~+[]]`,
// !0 ==> true
`"false[object object]"[2 + ~~true]+({}+[])[[~!+[]]*~+[]]`,
// ~true ==> -2
`"false[object object]"[2 + ~-2]+({}+[])[[~!+[]]*~+[]]`,
// ~-2 ==> 2
`"false[object object]"[2 + 1]+({}+[])[[~!+[]]*~+[]]`,
// 2+1 ==> 3
`"false[object object]"[3]+({}+[])[[~!+[]]*~+[]]`,
// "false[object object]"[3] ==> s
`"s"+({}+[])[[~!+[]]*~+[]]`,
// {} ==> "[object object]"
`"s"+("[object object]"+[])[[~!+[]]*~+[]]`,
// [] ==> "" [].toString()
`"s"+("[object object]"+"")[[~!+[]]*~+[]]`,
// "[object object]"+"" ==> "[object object]"
`"s"+"[object object]"[[~!+[]]*~+[]]`,
// +[] ==> 0
`"s"+"[object object]"[[~!0]*~+[]]`,
// !0 => true
`"s"+"[object object]"[[~true]*~+[]]`,
// ~true ==> -2
`"s"+"[object object]"[[-2]*~+[]]`,
// +[] ==> 0
`"s"+"[object object]"[[-2]*~0]`,
// ~0 ==> -1
`"s"+"[object object]"[[-2]*-1]`,
// [-2] ==> "-2"
`"s"+"[object object]"["-2"*-1]`,
// "-2" ==> 2
`"s"+"[object object]"[-2*-1]`,
// -2*-1 ==> 2
`"s"+"[object object]"[2]`,
// "[object object]"[2] ==> b
`"s"+"b"`,
// "s" + "b" ==> "sb"
`"sb"`,
];
results.forEach( (v,i)=>{
(function(delay){
setTimeout(function(){
console.log(Date.now(), eval(v))
},delay*5)
})(i)
})
你會發現好多sb,喲, 你還真看到這裡啊,說的就是你哦。 哈哈。
這些JavaScript程式設計黑科技,裝逼指南,高逼格程式碼,讓你驚歎不已
一行能裝逼的JavaScript程式碼
JS中{}+[]和[]+{}的返回值情況是怎樣的
What is {} + {} in JavaScript?
JavaScript中圓括號() 和 方括號[] 的特殊用法疑問?
javascript運算子——條件、逗號、賦值、()和void運算子
JavaScript values: not everything is an object
相關文章
- 裝逼的最高境界---一行js程式碼完成一個簡易版的貪吃蛇遊戲JS遊戲
- 一行Python程式碼能實現什麼喪心病狂的功能?Python
- 一行 CSS 程式碼的魅力CSS
- 一行程式碼完成 JAVA 的 EXCEL 讀寫——EasyExcel 的方法封裝行程JavaExcel封裝
- 裝逼技巧:程式設計師如何用程式碼罵別人sb,以及證明自己牛逼!程式設計師
- 推薦22個實用的一行Javascript程式碼Date大全,建議收藏JavaScript
- 第一行程式碼——書的理解行程
- Spring的資料庫程式設計淺入淺出——不吹牛逼不裝逼Spring資料庫程式設計
- 一行程式碼引發的恐懼行程
- 讓 Chrome 崩潰的一行 CSS 程式碼ChromeCSS
- 一行程式碼賣出570美元, 天價程式碼的內幕行程
- 分享一段牛逼程式碼
- 重構你的javascript程式碼JavaScript
- 神奇的Python,一行程式碼能做哪些炫酷的事情?Python行程
- 我常用的 10 個 CSS 一行程式碼技巧CSS行程
- 7個殺手級的JS一行程式碼JS行程
- 自定義註解!絕對是程式設計師裝逼的利器!!程式設計師
- MXRotationManager, 一行程式碼控制iOS裝置旋轉方向UIInterfaceOrientationMask行程iOSUI
- 一行Java程式碼實現遊戲中交換裝備Java遊戲
- 一行程式碼建立cell行程
- 一行程式碼實現Android的跨程式呼叫與通訊行程Android
- JavaScript的程式碼執行機制JavaScript
- 如何寫出漂亮的 JavaScript 程式碼JavaScript
- [譯] 一行 JavaScript 程式碼竟然讓 FT.com 網站慢了十倍JavaScript網站
- 裝逼只服程式設計師!用程式碼寫出租廣告,網友回覆亮了:程式碼有點爛啊程式設計師
- 只需一行程式碼,你的純文字秒變Markdown行程
- 一行降低 100000kg 碳排放量的程式碼!
- 一行程式碼如何隱藏Linux程式?行程Linux
- 分享一個用Git裝逼的小技巧~Git
- 程式設計技巧│提高 Javascript 程式碼效率的技巧程式設計JavaScript
- 編寫更優雅的 JavaScript 程式碼JavaScript
- [譯] 如何寫出漂亮的 JavaScript 程式碼JavaScript
- JavaScript | JavaScript刪除表格除標題行(第一行)的所有行JavaScript
- 深度掌握 Java Stream 流操作,讓你的程式碼高出一個逼格!Java
- gePlugin封裝成winform控制元件,一行程式碼即可載入。Plugin封裝ORM控制元件行程
- 一行程式碼讓你的專案輕鬆使用Dapr行程
- Cordova應用的JavaScript程式碼和自定義外掛程式碼的除錯JavaScript除錯
- python自學,小知識程式碼,能飛天的小程式碼Python