写javascript反混淆的项目中,遇到过许多刁钻的代码。现将他们以题目的方式整理出来。可能会有人认为这个题目没有什么意义。实际编程中也不太会用到。现实中确实是这样的。不过这些特性可以很好的利用在代码的混淆中。比如代码
let boolValue = true
这个时候代码就可以混淆为
let boolValue = !""
或者
let boolValue = ![]
再者
let boolValue= 1< parseInt(0.0000005)
话不多说,放码出来。请写出下面题目的结果。
true + false
结果为:1
解析:布尔值进行数学运算的时候,会先转换为数字,然后进行求值。
参考链接:https://262.ecma-international.org/5.1/#sec-11.6
[,,,].length
结果:3
解析:JavaScript allows trailing commas wherever a comma-separated list of values is accepted and more values may be expected after the last item. This includes: Array literals,Object literals,Parameter definitions, Function calls,Named imports, Named exports, Array and object destructuring
参考链接: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
[1, 2, 3] + [4, 5, 6]
结果:1,2,34,5,6”
解析:这是数组拼接的题目。可以看做是 [1, 2, 3 ].toString() + [4, 5, 6].toString()
0.2 + 0.1 === 0.3
结果:false
解析:javascript 中 0.1 + 0.2 = 0.30000000000000004 ,这是一个JavaScript 的知名笑话。再计算 0.30000000000000004 === 0.3
参考链接:https://0.30000000000000004.com/
let x = 1;
x = (x++, x);
console.log(x);
结果:2
解析:一个或者多个表达式中,最后一个表达式的值会作为返回值。
参考链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
!!""
结果:false
解析:false, 0, -0, 0n, “”, null, undefined, 和 NaN 都被认为是fale,”!!”被称为double not,在任何值之前添加两个感叹号可获取其对应的布尔原语
参考链接:https://developer.mozilla.org/en-US/docs/Glossary/Falsy
+!![]
结果:1parseInt(0.0000005)
结果:5true == "true"
结果:false010 - 03
结果:5
解析:010 是八进制 ,转换为十进制是8 ,03转换为十进制 3,故结果是5
"" - - ""
//减号
结果: 0
解析:根据上面的题目我们知道Number(“”) = 0 , 0 - (-0) ,结果是0. 需要注意的是两个减号中间是有空格的。如没有空格会报SyntaxError
+null === +false
结果:true
解析:+null 会转换为数字0,+false同样会转换为0,0 === 0 。所以结果是true
0/0
结果: NaN
解析:isNaN(0/0) 结果是true
1/0 > 10 ** 1000
结果是:false
解析:1/0 结果是Infinity 10 ×× 1000;也就是Math.pow(10, 1000) 结果是Infinity 那么Infinity > Infinity; // -> false
true++
结果:SyntaxError
解析:
(null - 0) + "0"
结果:00
解析:根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas中的列表,可以清晰的知道(0 - 0) + “0” = 0 + “0” ,最后即字符串拼接。
true + ("true" - 0)
结果: NaN !5 + !5
结果:0[] + []
[] + {}
{} + []
{} + {}
结果:
1 + 2 + "3"
结果: 33
解析:根据上面的讲解,这题是非常简单的了。
typeof NaN
结果: number undefined + false
结果: NaN "" && -0
结果:“”+!!NaN * "" - - [,]
结果:0参考链接:
检索关键字: