博客
关于我
只用这 6 个字符,就可以写出任意 JavaScript 代码!
阅读量:451 次
发布时间:2019-03-06

本文共 1358 字,大约阅读时间需要 4 分钟。

JavaScript 的神奇力量:用 6 个字符编写任意程序

你是否曾经在网上见过那些看起来奇怪却能正常运行的 JavaScript 代码?它们通常是由几个不同的字符写成的稀奇古怪的代码片段,虽然看起来毫无疑问却能发挥作用。例如,下面的代码片段看起来毫无意义,但它确实能正常运行:

[]()!+

这六个字符足以编写出任意 JavaScript 程序,这个技巧虽然被不少人知道,但鲜少有人了解它的工作原理。我们的目标是用这些字符来编写字符串“self”,并向 Self 语言致敬,因为 JavaScript 的灵感来源之一就是 Self。

JavaScript 的基本原理

这些字符之所以能发挥作用,主要归功于 JavaScript 的类型系统和数据类型转换机制。让我们来看这些字符的作用:

  • []:可以用来创建空数组。
  • !+:用于对数组进行操作。
  • ():用于将操作分组。

首先,空数组 [] 本身是一个真值,取非后会变成 false

![] === false

接下来,+[] 会将数组转换为字符串,然后进一步转换为数字。由于空数组的 toString() 方法返回空字符串,+[] 的结果是 0

+[] === 0

这种转换机制为我们提供了一个构建数字的方法。例如,+true 会变成 1,而 +false 会变成 0

+true === 1+false === 0

通过这种方式,我们可以生成所需的数字,然后将它们转换为字符,组合成目标字符串。

生成数字

为了生成数字,我们首先需要将数组转换为布尔值,然后再将布尔值转换为数字。例如:

+!(+[]) === 1

我们可以重复这个过程,生成多个数字:

+!(+[]) === 1+!(+[]) === 1+!(+[]) === 1+!(+[]) === 1

这样,我们就可以得到数字 123 等。

临门一脚,大功告成

现在我们来看看如何将这些数字转换为目标字符串“self”。每个字符对应一个数字位置:

  • s 对应字符位置 3
  • e 对应字符位置 4
  • l 对应字符位置 2
  • f 对应字符位置 0

我们可以通过下面的代码生成这些字符:

(![] + [])[3] === 's'(![] + [])[4] === 'e'(![] + [])[2] === 'l'(![] + [])[0] === 'f'

将这些字符组合起来,就得到了“self”。

最终代码

将以上逻辑整合起来,我们可以得到以下代码:

(![] + [])[+!+[] + !+[] + !+[]] + (![] + [])[+!+[] + !+[] + !+[] + !+[]] + (![] + [])[+!+[] + !+[]] + (![] + [])[+[]]

这段代码通过多次数组操作和转换,成功生成了字符串“self”。

总结

这六个字符的神奇力量源于 JavaScript 的类型转换机制和灵活的数据类型。通过对数组进行操作和转换,我们可以生成所需的数字,然后将它们转换为字符,组合成目标字符串。虽然看起来奇怪,但这种方法在 JavaScript 中确实有效。希望你能在此基础上发挥想象,编写出更多有趣的代码。无论是“self”还是其他字符串,这种方法都能帮你轻松实现!

转载地址:http://ewmyz.baihongyu.com/

你可能感兴趣的文章
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>