如题:如何朴实无华且枯燥的输出"hello world"
'\ud835\udcf1' +({}+[])[[~-~!+[]]*[~![]]+~~!+[]]+(!{}+[])[-[~!+[]]-~~!{}]+(!{}+[])[-[~!+[]]-~~!{}]+ ({}+{})[[~~!+[]]]+({}+[])[[-~-~~~!-[]]*[-~!+[]]+!+[]]+'\ud835\udce6'+({}+{})[[~~!+[]]]+ (!!{}+[])[~~!+[]]+(!{}+[])[-[~!+[]]-~~!{}]+([][[]]+[])[~~-~!+[]]
额呵呵,在f12控制台中输入上述代码,如图:
下面俺来讲解一下,hello world输出过程:
首先'\ud835\udcf1'和'\ud835\udce6'就是?和?对应的acsii嘛,
emmm接着先讲下位运算吧和js的一些常识吧
如下:js对象到字符串会调用该对象的toString()方法
原始值转换为布尔值: undefined、null、0、-0、NaN、””被转为false;其他所有原始值都被转为true。
下面就可以讲后面的怎么运算的了
({}+[])[[~-~!+[]]*[~![]]+~~!+[]]
这一段输出的是"e"
首先
({}+[])
输出的是"[object Object]"注意是字符串哦
[[~-~!+[]]*[~![]]+~~!+[]]
先讲一下~符号吧,在位运算中~符号运算相当于加个负号后减一比如~2=-3,~~2=2
+[]=0,
!+[]=true,
~!+[]=2,(先转化为数字后运算)
-~!+[]=2,
~-~!+[]=-3,
~![]=-1
~~!+[]=1
[[~-~!+[]]*[~![]]+~~!+[]]=-3*-1+1=4
({}+[])[[~-~!+[]]*[~![]]+~~!+[]]="[object Object]"[4]="e"
剩余的字母的获取方式也和上述这个五五开
值得注意的是还有以下获取字符串的方式
值得一题的是在js中用位运算,反而会降低运算速度
所以你看完本帖子获得的有用的知识居然是零欸
再附上一些好玩的
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
([][[]]+[])[+!![]]+([]+{})[!+[]+!![]]
-~-~+![]*-~-~![]+!![]+[]+-~-~+![]+-![]