将JavaScript原语分配给它们的命名等效变量,如“常量”

时间:2012-01-05 17:10:08

标签: javascript qtip

我正在查看qTip 2的源代码并看到以下内容:

// Munge the primitives - Paul Irish tip
var TRUE = true,
   FALSE = false,
    NULL = null;

我无法想出你应该做到这一点的理由,并且强烈认为它只会鼓励糟糕的编码习惯。假设开发人员在Yoda条件下输入错误,例如if (TRUE = someCondition()),那么TRUE很可能最终意味着false,或者您可能最终将someObject分配给{{} 1}}。

我想我只是想知道这种做法是否有某种赎回的质量,我很遗憾,或者这只是一个普通的Bad Idea™

3 个答案:

答案 0 :(得分:16)

这个目的只是为了改善压缩,保罗爱尔兰自己称之为“反模式”。

他在以下演示文稿中将其描述为“适用于压缩和范围链遍历”

在范围链遍历中,我们不会看到文字的任何改进为nullfalsetrue,因为范围链未被检查,它们只是文字。< / p>

undefinedwindows等其他标识符上,确实会检查范围链遍历。

Paul Irish Anti-patterns slide 55

答案 1 :(得分:4)

您可以为了代码压缩而这样做。例如,YUI Compressor不会触及truefalse,但它可以替换所有出现的内容,例如TRUEA,每次出现时会保存四个字符。例如,在压缩之前:

    if (foo === null) {
        bar = true;
    }

压缩后,假设压缩器将TRUE替换为aNULL替换为c

if(foo===c){bar=a;}

与此相反,压缩之后没有“更多原语”:

if(foo===null){bar=true;}

您在问题中正确引用的不良编码习惯危险可能超过额外压缩的小额节省。这取决于你是多么绝望地保存了几十个或者几百个字节。

就个人而言,我(几乎)从不这样做。太危险了。

答案 2 :(得分:2)

我认为这是推荐用于压缩的。

这些快捷变量将在munged时压缩,从而产生较小的文件。但是,你提到的缺点肯定是有效的点!