Open xiaoyu2er opened 6 years ago
送给产品经理一段代码 让他放到 console 去
(!(~+[]) + {})[--[~+""][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]]
其实这段代码是我的同事发给我的, 我定睛一看一定有坑, 于是准备破解一番
其实这里面涉及到的知识点无非三个
分析之前我推荐大家看几篇文章
首先我们把代码进行拆分
简单来看就是 (A)[B] + (C)[D]
(A)[B] + (C)[D]
首先来看 A !(~+[]) + {}
!(~+[]) + {}
+[] -(数据类型转换)-> 0 ~+[] --> ~0 -(位运算)-> -1 !(~+[]) --> !(-1) -(类型转换)-> false (!(~+[]) + {}) --> false + {} -(类型转换)-> 'false[object Object]'
再来看 B --[~+""][+[]]*[~+[]] + ~~!+[]
--[~+""][+[]]*[~+[]] + ~~!+[]
[~+""] --> [~0] --> [-1] +[] --> 0 --[~+""][+[]] --> --[-1][0] --> --(-1) --> -2 [~+[]] --> [~0] --> [-1] ~~!+[] --> ~~!0 --> ~~true --> ~-2 -> 1 B --> -2 * [-1] + 1 --> 2 + 1 --> 3
那么 (A)[B] --> 'false[object Object]'[3] --> 's'
(A)[B] --> 'false[object Object]'[3] --> 's'
再来看 C ({} + [])
({} + [])
这里的 {} 其实是个代码块
{}
所以等价于 +[] 即 [object Object]
+[]
[object Object]
再来看 D [~!+[]] * ~+[]
[~!+[]] * ~+[]
[~!+[]] --> [~!0] --> [!1] --> -2 ~+[] --> ~0 --> -1 D -> -2 * -1 --> 2
所以 (C)[D] --> '[object Object]'[2] --> 'b'
(C)[D] --> '[object Object]'[2] --> 'b'
那么
(!(~+[]) + {})[--[~+""][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]] --> (A)[B] + (C)[D) --> 's' + 'b' --> 'sb'
谢谢观看 😄
现在可以发给产品经理了
让他打开 chrome, (windows: F12, mac: command+shift+j)
粘贴 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
这就是我们前端一直想对你说的话
参考文章
注 文中对产品经理的冒犯仅为了行文效果 😅 前端和产品是相亲相爱的一家人 😆
--[~+""][+[]] --> --[-1][0] --> --(-1) --> -2
这句对吗
@nicewahson 对的哇
(-1)为何到-2了
@nicewahson 前面有 -- 嘛
--
送给产品经理一段代码 让他放到 console 去
(!(~+[]) + {})[--[~+""][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]]
其实这段代码是我的同事发给我的, 我定睛一看一定有坑, 于是准备破解一番
其实这里面涉及到的知识点无非三个
分析之前我推荐大家看几篇文章
首先我们把代码进行拆分
简单来看就是
(A)[B] + (C)[D]
首先来看 A
!(~+[]) + {}
再来看 B
--[~+""][+[]]*[~+[]] + ~~!+[]
那么
(A)[B] --> 'false[object Object]'[3] --> 's'
再来看 C
({} + [])
这里的
{}
其实是个代码块所以等价于
+[]
即[object Object]
再来看 D
[~!+[]] * ~+[]
所以
(C)[D] --> '[object Object]'[2] --> 'b'
那么
谢谢观看 😄
现在可以发给产品经理了
让他打开 chrome, (windows: F12, mac: command+shift+j)
粘贴
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
这就是我们前端一直想对你说的话
参考文章
注 文中对产品经理的冒犯仅为了行文效果 😅 前端和产品是相亲相爱的一家人 😆