为什么在JavaScript中(([[] === [])+ /-/)[1] ='a'和(1 + {})[(1 << 1)+1] ='b'是为什么?

平谷

最近,我遇到了一个有趣的网站,该网站展示了Java语言混淆器:http//bl.ocks.org/jasonsperske/5400283

例如,(([]===[])+/-/)[1]Givea(1+{})[(1<<1)+1]Give b

我尽力理解这些混淆结果的评估顺序,但徒劳无功。

(1+{})[(1<<1)+1]作为一个例子,据我所知,<<是按位移位运算和将返回2,所以表达式变为(1+{})[3]但是我不明白1+{}and的意思[3]

Google并不是真的对这个问题有帮助,因为搜索引擎不太喜欢方括号或斜杠,因此万一有重复的问题,对此我感到抱歉。

罗伊·纳米尔(Roi Namir)

这只是混淆技巧。

例如 :

[]===[] ===> false

([]===[])+/-/===> "false/-/"(您可以自己在控制台中对其进行测试)

那是什么(([]===[])+/-/)[1]呢?(第二个字符)

没错:'a'

可能还想看看这个:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在JavaScript中“ 1” + +“ 1” =“ 11”但“ 1”--“ 1” = 2

为什么 '1' + '1' = 98 和 '1' + 1 = 50?

为什么(-1 >>> 32)= -1?

为什么1 >> 32 == 1?

为什么1:[[]]等于(1:[]):[]?

为什么是'if(1 == 1 == 1 == 1 == 1);' 正确,但'if(-1 == -1 == -1 == -1 == -1);' 假?

为什么在JavaScript(Coercion)中1 +'1'='11'和1-'1'= 0?

为什么 (var a = b = 1;) 在 javascript 中等于 (var a = 1; b = 1;)?

为什么1 === 1 === 1为假?

为什么-1 >> 1计算为-1?

为什么1 +'1'='11'但1 *'1'= 1

为什么在Python中{1} == Frozenset({1})?

为什么在JavaScript中4294967295 >> 24 == -1?

为什么在JavaScript中“〜undefined”为-1?

为什么为 dx[dir 选择值 {1, 1, 0, -1, -1, -1, 0, 1} 和 {0, 1, 1, 1, 0, -1, -1, -1} ] 和 dy[dir]?

为什么加1?

为什么+ !! {}等于1?

为什么对于局部t = {1,[1] =“ a”,[2] =“ b”},t [1]输出为1

为什么在Javascript中1 =='1 \ n'为真?

为什么在JavaScript中,`2 << -1'为零而不是1?

为什么1+ []在JavaScript中返回“ 1”?

什么是a ^ b和(a&b)<< 1?

为什么 str([1]) = [1] 而不是 Python 中的“1”

为什么 L*a*b 的 ab 除以 110 以将其归一化在 -1 和 1 之间?

为什么sizeHint()是QSize(-1,-1)?

C编程:为什么(0 || -1)== 1?

为什么(1 + 3)[a]与a [1 + 3]相同?

为什么Perl认为1 <<-1是9223372036854775808?

为什么a [:] = 1与a [:] ='1'根本不同?