JavaScript中的Quines

JavaScript中的Quines

一个Quine是一个程序,它不接受任何输入,但输出其自身代码的一个副本。与其他语言不同,使用JavaScript/NodeJS编写Quine非常容易。所采用的方法是将JavaScript中的任何函数转换为字符串并打印出来。这使我们能够如下所示地输出函数的代码:

示例:

function quine() { console.log(quine.toString()) }
JavaScript

示例: 以上函数打印出自己的源代码,但它不是可执行的文件。 **** 我们会添加一条语句使其可以被调用。

<script> 
  function quine() {console.log(quine.toString() + " quine();")} quine(); 
</script>; 
JavaScript

输出:

"function quine() { window.runnerWindow.proxyConsole.log
(quine.toString()+\" quine();\") } quine();"
JavaScript

注意: 我们需要在日志语句中添加额外的内容来实现我们的目标。末尾的 ; 是不必要的。

我们可以让它更加优雅。我们知道JavaScript可以通过使用IIFE(立即调用函数表达式)在定义时立即运行函数。我们将在我们的代码中结合这个,如下所示:

示例:

<script> 
  ( function quine() {console.log("( " + quine.toString() + " )()")} )() 
</script>; 
JavaScript

输出:

"( function quine() { window.runnerWindow.proxyConsole.log
(\"( \" + quine.toString() + \" )()\") } )()"
JavaScript

请注意,console.log()语句会根据需要进行操作。我们可以通过添加箭头运算符和格式化字符串,使其更加美观。以下是生成的代码:

示例:

(=_=>`(={})()`)()
JavaScript

为了理解代码,我们删除了IIFE和格式字符串中的额外括号。添加的空格使其更清晰。第一个 $ 是一个包含箭头函数的变量。_ 是箭头函数的随机参数,没有被使用。箭头后面是我们的格式字符串,它可以分为两部分,字符串“$=”和变量,第一个 $ 本身。

示例:

$    =    _    =>    `$=${$}`
JavaScript

Quine需要能够执行,但这并不意味着会出现错误的程序不能是Quine。下面的示例仍然是一个Quine的示例。当作为.js文件在NodeJS的帮助下执行时,该程序输出它自己的源代码。NodeJS在第一行返回一个错误,而代码的其余部分就是错误的样子。

示例:

throw 0 
^ 
0
JavaScript

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册