使用空格对变量名进行模糊处理

时间:2012-06-30 15:28:41

标签: javascript variables syntax

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

我想写一些类似的东西:

var  =3;
alert( );

(不是空格但具有特定的unicode字符)

有可能吗?如果没有,是否有相同的东西?

1 个答案:

答案 0 :(得分: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空间,你的结果可能会更好。