6

我的目标不是在真正的网站中使用它,而是为了知识和乐趣。

我想写一些类似的东西:

var  =3;
alert( );

(不是空格,而是一个特定的 unicode 字符)

可能吗?如果没有,有没有等价的东西?

4

1 回答 1

3

尽管您不能将任何 Unicode 空白字符用作“原始”名称,但您可以使用window括号符号来做一些魔术。

例如:

window["    "] = 1;
alert(window["    "]);

这些本身不是“命名的”,因为如果不摆弄 的属性就无法引用它们window,因为 JavaScript 会忽略空格,但在混淆时它们会起到作用。

当然,这可以任意扩展到任何对象;window不是必需的,但这是我想到的,因为所有全局变量都是window. 为此,你可以有类似的东西:

var vars = {};
vars[" "] = 1;
vars["  "] = 2;
vars["   "] = 3;

alert(vars[" "] + vars["  "] + vars["   "]);

我认为这与您能够使用空格命名的变量一样接近。它们不是关键字意义上的真正变量var,但它们与您可能会出现的一样接近。

当然,您也可以使用 Unicode 空白字符作为属性:

var vars = {};
vars[" "] = 1; // uses em quad, U+2001
alert(vars[" "]); // real variable, alerts 1
alert(vars[" "]); // fake variable, alerts undefined

在这种情况下,我使用 U+2001 作为属性。它看起来与它后面的非常相似,它只是字符串中的一个通用空格,但它们与警报所暗示的不同。

就混淆而言,一个潜在的“问题”是由于适当的等宽字体和语法突出显示,字符串的分隔非常清晰,所以我不确定原始空间本身会有多大用处。但是,如果您加入一些更高级的 Unicode 空间,您的结果可能会更好。

于 2012-06-30T15:54:08.587 回答