代码:(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]

输出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 讲解 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]的更多相关文章

  1. Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。

    本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...

  2. [转]大白话系列之C#委托与事件讲解(三)

    本文转自:http://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html [我希望大家在看完文章的时候,多做做练习,自己也可以想个场 ...

  3. 使用Jquery+EasyUI 进行框架项目开发案例讲解之五 模块(菜单)管理源码分享

    http://www.cnblogs.com/huyong/p/3454012.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之五  模块(菜单)管理源码分享    在上四篇文章 ...

  4. 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享

    http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  5. c#委托事件及其讲解

    一定要标明出处,波哥的文章.所有文章都值得一看.这篇是摘抄的大白话之C#事件讲解.委托 http://www.cnblogs.com/wudiwushen/archive/2010/04/20/170 ...

  6. 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享    在上两篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

  7. 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之二 用户管理源码分享   在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享>我们分享 ...

  8. Android屏幕适配讲解与实战

    文章大纲 一.屏幕适配是什么二. 重要概念讲解三.屏幕适配实战四.项目源码下载   一.屏幕适配是什么   Android中屏幕适配就是通过对尺寸单位.图片.文字.布局这四种类型的资源进行合理的设计和 ...

  9. 【转】Java Socket编程基础及深入讲解

    原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...

随机推荐

  1. POJ 1159 - Palindrome (LCS, 滚动数组)

    Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 55018   Accepted: 19024 Desc ...

  2. poj 2728 最优比率生成树

    思路:设sum(cost[i])/sum(dis[i])=r;那么要使r最小,也就是minsum(cost[i]-r*dis[i]);那么就以cost[i]-r*dis[i]为边权重新建边.当求和使得 ...

  3. Ehcache(2.9.x) - API Developer Guide, Key Classes and Methods

    About the Key Classes Ehcache consists of a CacheManager, which manages logical data sets represente ...

  4. 160多个android开源代码汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  5. 【转】Github入门教程

    原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github] 首先让我们大家一起喊一句“Hello Github”.YEAH!就是这样. ...

  6. 和阿文一起学H5--如何把H5压缩到最小

    三种压缩图片的方法: 1.PS 但是PS每次只能压缩一张,下面介绍第二个神器 2.TinyPng压缩 https://tinypng.com/ 3.IloveIMG压缩 http://www.ilov ...

  7. fuse挂载hdfs目录到linux本地

    1,安装fuse yum -y install hadoop-hdfs-fuse 2.修改环境变量 vi /etc/profile 增加如下配置: JAVA_HOME=/usr/jdk64/jdk1. ...

  8. 基于 HTML5 的数据存储

    以前想做个静态网页APP.最初的思路是用本地文件存储数据,后来发现在手机上运行时,文件无法找到. 经过了长达几个月的搜索(实际也就几天),没有找到合适的方法. 就在绝望的时候,无意间搜到基于HTML5 ...

  9. OpenGL9-(FreeImage)加载图片-作为纹理

    /*** 这个例子展示如何使用FreeImage加载图片作为纹理* 初学者,在学习OpenGL的时候,往往因为OpenGL读图片没有那么方便* 而浪费了大量的时间在研究图片格式上,其实大可不必. 1. ...

  10. java新手笔记34 连接数据库

    1.JdbcUtil package com.yfs.javase.jdbc; import java.sql.Connection; import java.sql.DriverManager; i ...