有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 981|回复: 4
收起左侧

[JavaScript] 曾经无意中看到过的一段很有意思的JavagScript代码

[复制链接]

该用户从未签到

2

主题

8

好友

2150

积分

Continue

积分
2150
发表于 2012-9-1 11:47:40 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_)
这是一段合法的javascript代码,其效果相当于alert(1)。但是我一直没有实验出结果。

评分

参与人数 1宅币 +10 收起 理由
风音洛洛 + 10 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

2

主题

13

好友

669

积分

禁止发言

积分
669
发表于 2012-9-1 16:53:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

8

好友

2150

积分

Continue

积分
2150
 楼主| 发表于 2012-9-1 17:08:58 | 显示全部楼层

第一部分:
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()

第二部分:
1.[__[_/_]+__[_+~$]+$_[_]+$$](_/_)


第一部分代码可以改写为以下等价形式:
1. $ = [];
2. __ = !$+$;
3. _ = -~-~-~$;
4. $_=!''+$;
5. $$ = $_[_/_] + $_[+$];
$= [$][
6.    __[_] +
7.    ({}+$)[_/_] +
8.    $$  
9.  ];
10. $();

1. $先赋值为一个空数组
2. __ = ![] + [] = false + [] = "false"  这里利用了javascript运算的强制类型转换特性。首先空数组是一个非null值,因此![]的结果是false(布尔型)。在计算false + []时,由于数组对象无法与其他值相加,在加法之前会先做一个toString的转换,空数组的toString就是"",因此事实上在计算false + ""。这时false被自动转换为字符串。最终结果是"false"+"" = "false"。
3. 在计算~[]时,~需要一个数字操作数,空数组无法直接转换为数字,则作为0处理。因此~[] = ~0 = -1。
因此: _ = -~-~-~[] = -~-~-(-1) = -~-~1 = -~-(-2) = -~2 = -(-3) = 3
4. !''是true,使用+$将其变为字符串 "true"
5. 之前一直用“值+[]”来获得“值”的字符串形式。而“+[]”则是0(正号导致[]被自动转换为数值0)。因此:$$ = "true"[3/3] + "true"[+[]] = "true"[1] + "true"[0] = "rt"
6. __[_] = "false"[3] = "s"
7. ({} + [])导致空对象{}被转换为字符串"[object Object]", 因此({}+$)[_/_] = "[object Object]"[1] = "o"
9. 这里把$覆盖为 [[]]["s"+"o"+"rt"]。注意这里[[]]本身是一个包含空数组的数组,最终结果是,$ = [[]]["sort"] = [[]].sort = Array.prototype.sort。
10. 调用$(),作为整个表达式最终的取值。$是全局范围的,是window的一个属性,相当于window.$。


第二部分:
现在$是一个函数,因此~$ = ~0 (无法直接转换为数字则作为0处理) = -1。

[__[_/_]+__[_+~$]+$_[_]+$$](_/_) = ["false"[1]+"false"[3+(-1)]+"true"[3]+"rt"](1) = ["a"+"l"+"e"+"rt"](1)


最终结果为window["alert"](1)

评分

参与人数 1宅币 +30 元气(技能点) +2 收起 理由
风音洛洛 + 30 + 2

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

13

好友

669

积分

禁止发言

积分
669
发表于 2012-9-1 17:47:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

13

好友

669

积分

禁止发言

积分
669
发表于 2012-9-1 18:30:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-7 15:44 , Processed in 0.192092 second(s), 25 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表