`

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):

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

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

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

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

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

更多详细内容参考

 

由于字符串可以当作数组一样取里面的元素,于是 (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 范。

相关阅读:

31
4
分享到:
评论
5 楼 zonghengmodao 2013-06-03  
4 楼 qi04072008 2013-06-02  
redis 写道
  极客 geek 

3 楼 bili1483 2013-06-02  
为什么?还以为回复一下会变的
2 楼 bili1483 2013-06-02  
(+[[]+(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)  
1 楼 redis 2013-06-01  
  极客 geek 

相关推荐

    计算机应用基础(本科).txt

    任务被启动时,通常先将全部程序和数据装入内存,然后再开始运行 * B. 系统可用的内存容量就是硬件配置时实际配置的内存条的容量 * C. CPU的时间被分成若干时间片,任务在不同的时间片中轮转完成 * D. 只有当前活动...

    更好地使用JavaScript

    JavaScript的运行环境非常广泛,几乎涵盖了所有的主流设备和平台,包括Web浏览器、移动设备、嵌入式系统、操作系统、电视设备、服务器以及数据库(如CouchDB、MongoDB)。这种广泛的适用性使得JavaScript成为了一种...

    JavaScript在科学设计与计算中的应用.pdf

    3. **无需编译**:JavaScript是ASCII码文本,浏览器内置的解释器可以直接运行,简化了开发流程。 4. **简化编程**:相比其他编程语言,JavaScript的语法较为简单,但编写和调试过程中往往需要依赖浏览器进行验证,...

    DBSCAN ST-DBSCAN JavaScript源码

    此外,由于JavaScript的跨平台特性,这些算法也可以在服务器端(如Node.js环境)运行,配合后端数据处理流程。 总之,DBSCAN和ST-DBSCAN是强大的聚类工具,它们能够处理复杂的数据结构并找出有意义的模式。...

    Perlin噪声1D&2D&3D&D代码

    1D Perlin噪声: 一维Perlin噪声是最简单的形式,它生成一个连续的一维数组,可以用于创建平滑变化的曲线。这个实现可能包含一个简单的梯度插值函数,通过线性内插来平滑噪声值。1D Perlin噪声通常用于创建波动效果...

    spectrogram:JavaScript频谱图生成器和查看器

    作为一款基于JavaScript的库,"spectrogram"与HTML5紧密相连,这意味着它可以在任何支持HTML5的现代浏览器上运行,包括桌面和移动设备。JavaScript的跨平台特性和广泛的支持使得这个库具有极高的可用性和可移植性。 ...

    javascript验证码破解

    由于JavaScript本身的运行环境特性,使得这类验证码相对于传统的图片验证码更容易被破解。 #### 三、JavaScript验证码破解方法 ##### 3.1 利用HTML5 Canvas提取像素数据 在JavaScript验证码破解过程中,一个关键...

    JavaScript_高效三维重建与生成的大高斯重建模型.zip

    在JavaScript环境中,由于其运行时的限制,优化内存管理和计算效率尤为重要,特别是在处理大量数据时。开发者可能需要利用Web Workers进行多线程处理,以避免阻塞主线程。 总之,JavaScript实现的高效三维重建与...

    光学字符识别 (OCR) 工具_JavaScript_代码_下载

    将OCR功能集成到JavaScript中,意味着用户可以在浏览器端直接处理图像中的文字,而无需服务器端处理,提高了效率和用户体验。 在"ocr-tools-master"这个压缩包中,可能包含以下内容: 1. **源代码**:项目的核心...

    javascript生成验证码

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要在客户端运行,为用户提供动态交互体验。在本文中,我们将深入探讨如何使用JavaScript生成验证码,这是一个常见的安全机制,用于防止自动化程序(如...

    WorldSeed:Perlin 噪声在网络上生成 2d 环境

    在这个项目中,WorldSeed使用JavaScript实现Perlin噪声,这是一种在浏览器中运行的编程语言,非常适合交互式Web应用。JavaScript提供了灵活的DOM操作和强大的WebGL库,使得在网页上实时渲染2D地图成为可能。 首先,...

    pcm.rar_javascript_pcm A律

    JavaScript是一种在浏览器环境中运行的脚本语言,非常适合用于交互式的数据可视化和实时计算。`jscharts.js`和`jscharts1.js`可能包含了用于绘制图形的函数,比如使用GIF图像(A.gif、A1.gif)来直观地展示音频信号...

    MapMaker:使用基于柏林噪声的 p5.js 制作的 2D RPG 随机地图生成器-开源

    在地图生成中,柏林噪声可以生成平滑过渡的地形,如山脉、河流、森林等,为2D游戏世界带来真实感和多样性。 在“sketch.js”文件中,开发者可能已经实现了柏林噪声的计算和应用。这个文件通常包含了主程序的逻辑,...

    HarrisCornerDetector:用 JavaScript 编写 Harris 的角检测器算法,并附有示例

    通过深入研究此项目,开发者不仅可以理解哈里斯角点检测的原理,还能学习如何将图像处理算法移植到 JavaScript 环境中,这对于前端开发和Web应用的图像分析具有重要意义。同时,这个项目也为其他想要在浏览器环境中...

    signal:基于数字的Javascript库,用于信号处理,滤波和控制理论

    在JavaScript中,Signal库的卡尔曼滤波器功能允许开发者处理实时数据流,通过不断地预测和更新状态来减少噪声影响,提高信号质量。卡尔曼滤波器的实现包括预测和更新两个步骤,涉及到状态方程和观测方程,以及系统...

    Matlab预测维护工具箱简介_HTML_JavaScript_源码_下载.zip

    Matlab预测维护工具箱是MathWorks公司为工业设备和系统提供的高级分析工具,它结合了机器学习、...通过深入理解和应用这个工具箱,工程师可以提升故障预测的准确性和效率,从而优化设备运行,减少停机时间和维修成本。

    rainbownoise:噪声发生器 webapp

    在这个噪声发生器中,JavaScript负责处理音频生成逻辑,控制噪音的参数,如频率分布、颜色和强度,并将结果实时呈现给用户。开发者可能使用了Web Audio API,这是一个强大的JavaScript接口,用于在Web上创建和处理...

    worleyjs:可嵌入和可自定义的Worley Noise生成器,使用纯Javascript编写

    完全用JavaScript编写的易于使用的Worley噪声生成器。 该模块是可嵌入和可自定义的。 该模块可在浏览器,Web Worker和节点中使用。 该模块可以通过CommonJS,AMD或script标签进行实例化。 考虑到使用ES6编写和实现的...

    hopfield:只是用JavaScript编写的Hopfield网络

    在这个项目中,我们看到的是用JavaScript实现的Hopfield网络,这使得它可以在Web环境中运行,为数据处理和模式识别提供了一种有趣的方法。 Hopfield网络的基本构建块是神经元,它们以网络的形式相互连接。每个神经...

    WebRTC噪声抑制源码.zip

    噪声抑制是WebRTC中的关键部分,它能有效地去除背景噪音,提高语音通信的质量。 在WebRTC中,噪声抑制主要由一系列复杂的音频处理算法实现,这些算法通常包括预处理、噪声估计、语音活动检测(VAD)、降噪等步骤。...

Global site tag (gtag.js) - Google Analytics