sb 讲解 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
代码:(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
输出sb。
分段解析:
首先解析s:
(!(~+[])+{}) --> 输出 "false[object Object]"
由于 ! 优先级 高于 +, 所有先算 !(~+[]), 而 ~+[] ,根据标准。。解释器会把 [] 转成 0;从而得到 ~0. =-1,所以 (~+[])=-1,而 !(-1) =false;
从而得到 (false+{}). 标准规定默认相加会调用toString 操作。相当于 "false"+"[object Object]";
下面解析 索引位置:[--[~+""][+[]]*[~+[]] + ~~!+[]]
首先确定运算顺序: 由于[]高于 --,-- 优先级高于 *和+。 顺序如下
1. [~+""] =r1 = ~(+"") 而 +"" =0; 所以 ~+"" ==>~0=-1;故为 [-1]
2. [ +[] ]= r2 = [0]
3. [~+[]]=r3 = [~0] = [-1]
4. [(--r1r2)*r2+~~!+[]] = [--[-1][0]*[-1]+1] = [--(-1)*[-1]+1] = [-2*[-1]+1]=[3]
返回结果 [3]; 备注 : ~~!+[] = 1
所以(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]='s';
下面看b:({}+[])[[~!+[]]*~+[]]
首先看:({}+[]) 结果为 "[object Object]". 按标准会把两边操作数toString 操作。结果 "[object Object]"+""="[object Object]"
然后 [[~!+[]]*~+[]]:
1. [~!+[]]
1.1 +[]=r1=0
1.2 !r1=r2=!0=true (-)一元操作符说明:
1.3 ~r2=~true=-2
所以 [~!+[]]=[-2]
2.~+[]
2.1 +[]=r1=0 (+): 一元操作符说明:http://es5.github.io/index.html#x11.4.6
2.2 ~r1=~0=-1 ( ~ )一元操作符说明:http://es5.github.io/index.html#x11.4.8
所以 ~+[]=-1
所以 [[~!+[]]*~+[]]=[-2]*[-1]=2 (*) 二元操作符说明:http://es5.github.io/index.html#x11.5.1
所以 ({}+[])[[~!+[]]*~+[]]= "[object Object][2]"=b;
sb 讲解 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]的更多相关文章
- Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。
本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...
- [转]大白话系列之C#委托与事件讲解(三)
本文转自:http://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html [我希望大家在看完文章的时候,多做做练习,自己也可以想个场 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五 模块(菜单)管理源码分享
http://www.cnblogs.com/huyong/p/3454012.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之五 模块(菜单)管理源码分享 在上四篇文章 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享
http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- c#委托事件及其讲解
一定要标明出处,波哥的文章.所有文章都值得一看.这篇是摘抄的大白话之C#事件讲解.委托 http://www.cnblogs.com/wudiwushen/archive/2010/04/20/170 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享 在上两篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之二 用户管理源码分享 在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享>我们分享 ...
- Android屏幕适配讲解与实战
文章大纲 一.屏幕适配是什么二. 重要概念讲解三.屏幕适配实战四.项目源码下载 一.屏幕适配是什么 Android中屏幕适配就是通过对尺寸单位.图片.文字.布局这四种类型的资源进行合理的设计和 ...
- 【转】Java Socket编程基础及深入讲解
原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...
随机推荐
- [改善Java代码]断言绝对不是鸡肋
建议19: 断言绝对不是鸡肋 在防御式编程中经常会用断言(Assertion)对参数和环境做出判断,避免程序因不当的输入或错误的环境而产生逻辑异常,断言在很多语言中都存在,C.C++.Python都有 ...
- [设计模式]<<设计模式之禅>>关于开闭原则
开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统,先来看开闭原则的定义: Software entities like classes,modules and fun ...
- CSS行高--line-height
遇到的问题:在css中,不理解line-height:1与line-height:1px的区别 发现的过程:最近在学做一个网站的过程中,设置两行文字之间的行高时需要用到line-height,发现了这 ...
- CSS3 伸缩布局盒模型记
CSS3 伸缩布局盒模型 CSS3引入的布局模式Flexbox布局,主要思想是让容器有能力让其子项目能够改变其宽度,高度,以最佳方式填充可用空间.Flex容器使用Flex项目可以自动放大与收缩,用来填 ...
- jquery 60秒倒计时
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- double的值太大,以及补0
当double的值太大的时候,比如1000000000 用DecimalFormat: double d = 1.0E7; System.out.println(new DecimalFormat(& ...
- SQL Server的三种物理连接之Merge join(二)
简介 merge join 对两个表在连接列上按照相同的规则排序,然后再做merge,匹配的输出. 下面这个动态图展示了merge join的详细过程. merge join示例 创建两个表 IF O ...
- 创建featureclass,为它赋别名,并移动到数据集下
if (pOutFtrClass == null) { //continue; //创建featureclass //得到规范的字段集 IFields pFields = pFeatureClass. ...
- 公交CPU卡原理
现在的公交卡已经开始逐步的采用IC卡(CPU卡?什么东东?),而且在国家交通部的推动下,开始了全国范围内的互联互通.以后,手里只用拿着一张卡,就可以走遍全国,而且如果支持在线充值的话,基本上就不用在车 ...
- 3月3日(3) Binary Tree Preorder Traversal
原题 Binary Tree Preorder Traversal 没什么好说的... 二叉树的前序遍历,当然如果我一样忘记了什么是前序遍历的.. 啊啊.. 总之,前序.中序.后序,是按照根的位置来 ...