前端送给产品经理的一段代码,有意思
2018-02-09 16:00
555 查看
送给产品经理一段代码 让他放到 console 去
其实这段代码是我的同事发给我的, 我定睛一看一定有坑, 于是准备破解一番
其实这里面涉及到的知识点无非三个
数据类型的转换
位运算(按位非)
运算符的优先级
分析之前我推荐大家看几篇文章
数据类型转换: 自动转换
按位操作符: ~(按位非)
运算符优先级
首先我们把代码进行拆分
首先来看 A
再来看 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'
再来看 C
({} + [])
这里的
{}其实是个代码块
所以等价于
+[]即
[object Object]
再来看 D
[~!+[]] * ~+[]
[~!+[]] --> [~!0] --> [!1] --> -2 ~+[] --> ~0 --> -1 D -> -2 * -1 --> 2所以
(C)[D] --> '[object Object]'[2] --> 'b'
那么
(!(~+[]) + {})[--[~+""][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]] --> (A)[B] + (C)[D) --> 's' + 'b' --> 'sb'谢谢观看
相关文章推荐
- 测试、前端、产品经理的一般要求
- 一段分类代码--产品分类的!
- 工作日记2017.07.26 一段有意思的代码,关于事务和测试
- 一段有意思的代码
- 一段有意思的matlab代码
- 产品经理需要会写代码吗?
- 有一段有意思的代码-javascript现实多行信息
- 来自一个前端大神转产品经理后的聊天感悟
- 一段有意思的代码
- 一段有意思的代码
- 一段很有意思的代码
- 一段有意思的代码
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
- 【产品经理】沟通篇之如何与前端沟通
- 一段有意思的java代码
- 麦子学院IT资源,web前端,UI设计,Java全套,IOS,android,产品经理,pyhton,网络安全,运维
- 分享一段通过前端javascript脚本 启用/禁用超链接的代码
- 产品经理从零到一技术进阶:不懂代码也能愉快地与开发相处
- 有意思的一段代码
- 关于Java异常一段很有意思的代码