为我的博客做了一个很有 geek 风格的关于页面。

运行下面 javascript 代码,可以看到我的信息。

(+[[]+(1<<1<<1<<1)+(1^1<<1)+(1<<1>>1)+(-~1<<1<<1)+(1.1>>1.1)+(11>>>1)])[[(!!/-/+{})[111^111]+[[]+{}][!1&.1][1|1>>1|1]]+([111/[]+[]][+(1>1)][([]+{})[11-1>>1]+[[],[]+{}+[]][[]+1][1]+(/^/[1]+[])[1|1>>1|1]+[{},1e1,!{}+[]][1+1][1<<1^1]+(11/!{}+{})[~1+1e1+~1]+[!!{}+{}][[]&111][1&1]+(/^/[111]+[])[11^11]+[{},[{}]+{},1][1+[]][11-~1+11>>1]+(!!1+{})[1&1>>1]+([]+{1:1}+[])[1|1]+[[]+!!1][111>>>111][1<<1>>1]]+[])[([]+![111])[1|1<<1|1]+[/=/,[]+[][11]][1|[]][1>>1]+([{}]+{})[1+!![1]]+[1,!1+/~/][1%11][1^1<<1]+(111/[]+{})[~1+1e1+~1]+[!!/-/+/-/][111%111][+!!1]]((~1+1e1+1)+((!1&.1)==([]+/-/[(!![111]+{})[1^1]+(!![1]+[])[1<<1^1]+(!{}+{})[1^1<<1]+(!![1]+/-/)[+(1>1)]])[+(1>1)]),1-~1<<1)](~1-~1e1<<1<<1)+":"+(([]===[])+/-/)[5]+(([]===[])+/-/)[5]+(+[[]+(1e1>>1)+(~1+1e1+~1)+(!1&.1)+(111%11)+(1+1<<1)+(1<<1^11>>1)+(1<<1<<1)+(~1+1e1+1)+(+(1>1))+(+[])+(~1-1+11)+(-~1<<1<<1)+(1-~1<<1)+(~1+1e1)])[[(!!/-/+[])[11&[]]+[[]+{11:11}+[]][111>>111][1+[]]]+([11/!1+/1/][1&1>>1][([{}]+{})[1e1>>1|1]+[[],[]+{111:111}+[]][1|1][111%11]+([]+[][11])[1<<1>>1]+[{},1e1,!/~/+{}][1<<1^1>>1][1<<1^1]+([]+11/!{})[~1+1e1+~1]+[!![111]+[]][1%1][1&1]+([]+[][111])[.1^!1]+[{},[]+{},1][111%11][11-~1+11>>1]+([]+!!1)[111>>>111]+([]+{}+[])[[]+1]+[!!1+[]][1^1][111%11]]+[])[(!1+{})[1^1<<1]+[/=/,[]+/^/[11]][1|[]][11.11>>11.11]+([]+{}+[])[~~(1.1+1.1)]+[1,!{}+/~/][1][1|1<<1]+(1/!{}+[])[~1+1e1+~1]+[!![1]+{}][111.111>>111.111][1+[]]]((11^1<<1)+((1>>1)==([]+/-/[(!!/-/+/-/)[+(111>111)]+(!![11]+[])[1-~1]+(![11]+{})[1|1<<1|1]+(!!{}+[])[11%11]])[111.111>>111.111]),11+1>>1)](~1-~1e1<<1<<1)+"."+(+[[]+([]+1)+(1-~1<<1)+(1+1<<1)+(1|1<<1)+(1<<1<<1<<1)])[[(!!1+{})[!1&.1]+[[]+{}+[]][1&[]][1+[]]]+([11/[]+{}][+(111>111)][([{}]+[{}])[1e1>>1]+[[],[]+{}][[]+1][+!!1]+(/^/[111]+/&/)[1&1]+[{},1e1,!1+[]][1<<1][1^1<<1]+(111/!{}+/1/)[~1+1e1+~1]+[!!/-/+[]][11>>11][1|1]+([][1]+/&/)[1.1>>1.1]+[{},[{}]+{},1][~~1][1+1e1+1]+([]+!!1)[1^1]+([]+{})[1&1]+[!!1+{}][!1&.1][1|[]]]+[])[([]+!1)[1|1<<1|1]+[/=/,[]+/^/[11]][111%11][11.11>>11.11]+([{}]+[{}])[~~(1.1+1.1)]+[1,[]+!/~/][1|1>>1|1][1^1<<1]+([]+11/[])[11+1>>1]+[!!/-/+{}][+(1<1)][~~1]]((1e1-1)+((+[])==([]+/-/[(!!1+[])[!1&.1]+(!!/-/+/-/)[1|1<<1|1]+(!1+{})[1<<1^1]+(!![1]+/-/)[11>>11]])[111^111]),-~11>>1)](~1-~1e1<<1<<1)

如何实现的呢?

@OKter 说是 ASCII 码拼接。到底是不是呢?

第一步

先来个简单的,就以 justjavac 为例吧。首先我们要输出 j

下面这段代码可以输出 j

(1+{})[4]

解释:代码 1+{} 的结果是 "1[object Object]", 显然,我们得到了一个包含 j 的字符串。但为什么会如此奇怪呢?毕竟我们都期望 1+{} 的结果应该是 1。

对象加法

有下面这样的一个加法操作。

value1 + value2

在计算这个表达式时,内部的操作步骤是这样的 (§11.6.1):

  1. 将两个操作数转换为原始值 (以下是数学表示法的伪代码,不是可以运行的 JavaScript 代码):

     prim1 := ToPrimitive(value1)prim2 := ToPrimitive(value2)
    

    PreferredType 被省略,因此 Date 类型的值采用 String,其他类型的值采用 Number

  2. 如果 prim1 或者 prim2 中的任意一个为字符串,则将另外一个也转换成字符串,然后返回两个字符串连接操作后的结果。

  3. 否则,将 prim1 和 prim2 都转换为数字类型,返回他们的和。

更多详细内容参考

  • JavaScript中,{}+{}等于多少?

由于字符串可以当作数组一样取里面的元素,于是 (1+{})[4] 就得到了 j。

第二步

既然我们得到了 j,那下一步就是 u 了。我们还是按照这个思路,哪个字符串里面还有 u 呢? 在 javascript 中确实有这么一个特殊的值,含有 u: "undefined",思来想去,可以使用这段代码:

/1/[1]+[]

分开解释:

  1. /1/ 是一个正在表达式

  2. 当他后面跟上 [] 时,被强制转换成了数组,然后去取里面的元素(第二个元素),得到的结果是 undefined(注意:是 undefined 值,不是字符串)

  3. 把 undefined 转换成字符串,在这里我们把它和数组相加。

呵呵,上面使用正在表达式 /1/ 有点儿卖弄的嫌疑,其实用 1[1] 就够了。 为了更有 geek 感,可以多出现 0 和 1。通过 /1+/[+0]+[+1] 我们可以得到字符串 "undefined1"。

使用数组操作符把我们想要的 u 提取出来, (/1+/[+0]+[+1])[0]

现在我们已经得到了字符串 "ju" 了。按照这种方法,我们可以得到其他的字符串。没有做不到的,只有想不到的。

问题来了

用这种方法能拼出所有的字符吗? @长夜 则提出了更深的问题: “可以拼中文吗?”

@TODO 待续……

大功告成

当我们得到了所有的字符串,就可以使用 + 号把他们连接起来。 你以为这就完了吗?当然远远没有,我们应该让我们的代码更 Cool,更有 geek 范。

相关阅读:

  • JavaScript 的怪癖 1:隐式类型转换
  • 为什么 ++[[]][+[]]+[+[]] = 10?

转载于:https://www.cnblogs.com/lanzhi/archive/2013/06/01/6468090.html

javascript:可以运行的噪音相关推荐

  1. 理解JavaScript的运行

    JavaScript可以运行在head和body标签中!HTML的脚本必须放在<script></script>标签中间!浏览器会解释并执行位于script标签中的脚本!在上一 ...

  2. Node.js -- JavaScript的运行环境

    一初识Node.js 1.前端三剑客 HTML : 骨架 CSS :外观 JS : 灵魂 2.浏览器中JavaScript的组成部分 JavaScript可以在浏览器中被执行的原因是浏览器里面都有一个 ...

  3. JavaScript的运行机制,简单大白话讲解.

    今天本来想写一篇async,await的文,但是讲它就得讲Promise,但是讲Promise又得讲异步编程,讲异步编程又得讲JS的运行机制.冷静一下 还是先讲讲基础吧 (本文仅为个人见解,有错误请指 ...

  4. JavaScript的运行 safari 中文显示乱码

    文章目录 JavaScript的运行 script 标签 客户端脚本语言 MIME 类型 link 标签 外部样式表 safari 中文显示乱码 div表示什么 JavaScript的运行 在html ...

  5. JavaScript的运行模式

    是一种解释性脚本语言. 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为. 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离. 跨平台特性,在绝大多数浏览器的支持 ...

  6. 【利好工具】JavaScript及时运行调试工具

    今天要介绍的这个工具叫RunJS[1],是运行在各大系统上的客户端,目前支持主流的macOS.Windows.Debian和Universal Linux平台. 你可以在上面编写你的JavaScrip ...

  7. JavaScript单线程运行机制与并发模型

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一时间只能做一件事.具体地,一个window对应一个JavaScript线程. JavaScript ...

  8. JavaScript的运行机制

    目录 参考链接: 阮一峰运行机制详解 一.JavaScript是单线程语言: 二.JavaScript的事件循环机制: 同步任务(synchronous): 异步任务(asynchronous): 事 ...

  9. JavaScript公共运行库

    /* **************************************************** 功 能:验证函数集合 说 明: 版 本:1.0 作 者: 创建时间:2005-8-25 ...

最新文章

  1. 23 种设计模式实战 pdf(很全)
  2. windows渗透大全
  3. leetcode1177. 构建回文串检测(前缀和)
  4. module 'queue' has no attribute 'Queue'解决
  5. 分布式事务模型--TCC
  6. python从入门到实践课后答案-Python编程:从入门到实践(课后习题8)
  7. 静态电子购物网站设计回忆
  8. 如何在linux系统下的抓包文件保存在u盘里,在xp系统中打开,【Linux】Wireshark在Linux系统下的安装及使用...
  9. 缺失值处理的三种方法
  10. 微信小程序【获取用户昵称头像和昵称(附源码)】
  11. Socket+MFC的聊天室
  12. 12 个最佳的免费学习编程的游戏网站
  13. python pil grab screen
  14. 设计模式 | 中介者模式(详解)
  15. Java怎么写相对路径的问题
  16. 207最新android书籍,《最强Android书 架构大剖析》PDF(高清版)
  17. RK3288的几种USB模式
  18. 判断PR劫持的目标网站的方法
  19. PDU积攒新途径(北京) - 国家外专局免费活动(讲座)
  20. Android背景色渐变(左上-右下)

热门文章

  1. Struts2之一个Action包含多个控制处理逻辑
  2. 【NUMBER】有关Oracle NUMBER类型定义中precision和scale的测试和总结
  3. Nmap Windows 版本时区显示乱码
  4. 安全测试基础 -- 概述【转载】
  5. BackgroundWorker
  6. 阻塞队列BlockingQueue
  7. 《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
  8. 【进程】进程通信-共享内存
  9. You can't specify target table 'myusertable' for ......in FROM clause
  10. 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!