用JavaScript写一个quine小程序

js的语言特性自带了Ajax和eval,用这2个组件会让quine难度大大降低,所以本文不会使用这两个组件。

用js写quine的难点在于quine本身和字符串的转义。首先是换行符,源代码不应该有任何的换行,否则转义\n将是一个无尽的循环,而实际上,不应该转义任何的字符,包括引号。

js中有2个字符串表示方法,输出的程序还要求引号也保持一致,但有不能转义,所以只能用另一种方式来表示引号了,比如URI中的%22就表示双引号。

quine的核心其实是一个字符串替换其本身,再加上转义字符串,稍作注意,写出一个quine其实不难。

var a="var a=%22@%22;a=decodeURI(a).replace('@',a);alert(a);";a=decodeURI(a).replace('@',a);alert(a);

发表新的回复

花生PeA 2019年1月8日 上午12:49

~function (v) {
console.log(v +'(' + v.replace(new RegExp(String.fromCharCode(96),'g'), String.fromCharCode(92) + String.fromCharCode(96)) + ');’);
}(~function (v) {
console.log(v +'(\
‘ + v.replace(new RegExp(String.fromCharCode(96),’g’), String.fromCharCode(92) + String.fromCharCode(96)) + ‘`);’);
}`);

回复