javascript:可以运行的噪音
为我的博客做了一个很有 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):
将两个操作数转换为原始值 (以下是数学表示法的伪代码,不是可以运行的 JavaScript 代码):
prim1 := ToPrimitive(value1)prim2 := ToPrimitive(value2)
PreferredType
被省略,因此Date
类型的值采用String
,其他类型的值采用Number
。如果 prim1 或者 prim2 中的任意一个为字符串,则将另外一个也转换成字符串,然后返回两个字符串连接操作后的结果。
否则,将 prim1 和 prim2 都转换为数字类型,返回他们的和。
更多详细内容参考
- JavaScript中,{}+{}等于多少?
由于字符串可以当作数组一样取里面的元素,于是 (1+{})[4]
就得到了 j。
第二步
既然我们得到了 j,那下一步就是 u 了。我们还是按照这个思路,哪个字符串里面还有 u 呢? 在 javascript 中确实有这么一个特殊的值,含有 u: "undefined",思来想去,可以使用这段代码:
/1/[1]+[]
分开解释:
/1/
是一个正在表达式当他后面跟上 [] 时,被强制转换成了数组,然后去取里面的元素(第二个元素),得到的结果是 undefined(注意:是 undefined 值,不是字符串)
把 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:可以运行的噪音相关推荐
- 理解JavaScript的运行
JavaScript可以运行在head和body标签中!HTML的脚本必须放在<script></script>标签中间!浏览器会解释并执行位于script标签中的脚本!在上一 ...
- Node.js -- JavaScript的运行环境
一初识Node.js 1.前端三剑客 HTML : 骨架 CSS :外观 JS : 灵魂 2.浏览器中JavaScript的组成部分 JavaScript可以在浏览器中被执行的原因是浏览器里面都有一个 ...
- JavaScript的运行机制,简单大白话讲解.
今天本来想写一篇async,await的文,但是讲它就得讲Promise,但是讲Promise又得讲异步编程,讲异步编程又得讲JS的运行机制.冷静一下 还是先讲讲基础吧 (本文仅为个人见解,有错误请指 ...
- JavaScript的运行 safari 中文显示乱码
文章目录 JavaScript的运行 script 标签 客户端脚本语言 MIME 类型 link 标签 外部样式表 safari 中文显示乱码 div表示什么 JavaScript的运行 在html ...
- JavaScript的运行模式
是一种解释性脚本语言. 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为. 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离. 跨平台特性,在绝大多数浏览器的支持 ...
- 【利好工具】JavaScript及时运行调试工具
今天要介绍的这个工具叫RunJS[1],是运行在各大系统上的客户端,目前支持主流的macOS.Windows.Debian和Universal Linux平台. 你可以在上面编写你的JavaScrip ...
- JavaScript单线程运行机制与并发模型
一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一时间只能做一件事.具体地,一个window对应一个JavaScript线程. JavaScript ...
- JavaScript的运行机制
目录 参考链接: 阮一峰运行机制详解 一.JavaScript是单线程语言: 二.JavaScript的事件循环机制: 同步任务(synchronous): 异步任务(asynchronous): 事 ...
- JavaScript公共运行库
/* **************************************************** 功 能:验证函数集合 说 明: 版 本:1.0 作 者: 创建时间:2005-8-25 ...
最新文章
- 23 种设计模式实战 pdf(很全)
- windows渗透大全
- leetcode1177. 构建回文串检测(前缀和)
- module 'queue' has no attribute 'Queue'解决
- 分布式事务模型--TCC
- python从入门到实践课后答案-Python编程:从入门到实践(课后习题8)
- 静态电子购物网站设计回忆
- 如何在linux系统下的抓包文件保存在u盘里,在xp系统中打开,【Linux】Wireshark在Linux系统下的安装及使用...
- 缺失值处理的三种方法
- 微信小程序【获取用户昵称头像和昵称(附源码)】
- Socket+MFC的聊天室
- 12 个最佳的免费学习编程的游戏网站
- python pil grab screen
- 设计模式 | 中介者模式(详解)
- Java怎么写相对路径的问题
- 207最新android书籍,《最强Android书 架构大剖析》PDF(高清版)
- RK3288的几种USB模式
- 判断PR劫持的目标网站的方法
- PDU积攒新途径(北京) - 国家外专局免费活动(讲座)
- Android背景色渐变(左上-右下)
热门文章
- Struts2之一个Action包含多个控制处理逻辑
- 【NUMBER】有关Oracle NUMBER类型定义中precision和scale的测试和总结
- Nmap Windows 版本时区显示乱码
- 安全测试基础 -- 概述【转载】
- BackgroundWorker
- 阻塞队列BlockingQueue
- 《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
- 【进程】进程通信-共享内存
- You can't specify target table 'myusertable' for ......in FROM clause
- 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!