js小密文!(误)

332 阅读1分钟

在掘金上看到这样一个沸点

然后——


那么这是怎么实现的呢?

输出的是字符串,那么肯定是拼接的——那么

(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]就是's',

({}+[])[[~!+[]]*~+[]]就是'b'

继续拆分


诶,这就是b么,,,原来就是'[object Object]'[2]啊

那上面的也不用说了,(!(~+[])+{})是'false',--[~+""][+[]]*[~+[]] + ~~!+[]是3就完了呗

另:其实(!(~+[])+{})输出的是"false[object Object]",所以(!(~+[])+{})写(!{}+[])也可。

下一个问题就是[~!+[]]*~+[]为什么是2呢?

一步一步看[~!+[]]坑定是个数组。

+[]是0(空数组转成数字是0),!+[]是true(0逻辑上是否,加否定就是true了),~true是-2(true转数字默认1,~1就是-2啦)

那么[~!+[]]*~+[]其实是——[-2]*-1,就是2!

那么最后——(!{}+[])[-~-~-~[]]+(!{}+[])[~!+[]*~!+[]]+(!{}+[])[~!+[]*~!+[]]+' '+(!![]+[])[-~-~[]],嘿嘿