js的语言特性自带了Ajax和eval,用这2个组件会让quine难度大大降低,所以本文不会使用这两个组件。
用js写quine的难点在于quine本身和字符串的转义。首先是换行符,源代码不应该有任何的换行,否则转义\n将是一个无尽的循环,而实际上,不应该转义任何的字符,包括引号。
js中有2个字符串表示方法,输出的程序还要求引号也保持一致,但有不能转义,所以只能用另一种方式来表示引号了,比如URI中的%22就表示双引号。
quine的核心其实是一个字符串替换其本身,再加上转义字符串,稍作注意,写出一个quine其实不难。
[js]var a="var a=%22@%22;a=decodeURI(a).replace('@',a);alert(a);";a=decodeURI(a).replace('@',a);alert(a);[/js]
花生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) {
‘ + v.replace(new RegExp(String.fromCharCode(96),’g’), String.fromCharCode(92) + String.fromCharCode(96)) + ‘`);’);console.log(v +'(\
}`);