变量未定义;"被认为是好的

Is "var undefined;" considered as good?

本文关键字:认为是 quot 未定义 变量      更新时间:2023-09-26

我认为undefined(或window.undefined)是一个常量变量,而不是一个保留字(像NaN, Infinity,不像null)。当使用UglifyJS压缩一个经常使用undefined的Javascript文件时,最好声明一个局部变量来保存undefined

例如:

function main() {
  var undefined;
  ...
}

UglifyJS会给我:

function main(){var n;...}

编辑

谢谢@T.J。克劳德!现在我有自己的选择了。我确信undefined, NaN, Infinitywindow不是保留字,它们只是"只读"。因此,声明一个本地undefined是没有问题的(即使是严格模式)。我也不担心维护问题的混乱,我只需要写一个// comment/* comment */来解释这是什么意思。

是否"好"是一个意见问题,所以我们把它放在一边。

阳性:

  • 更小的压缩文件,因为所有的undefined都变成了n或类似的。

底片:

  • 围绕可能引起的混淆的维护问题。

没有技术不这样做的理由(除了可维护性)。在您的场景中,变量将具有真正的值undefined。实际上,以前编写像这样的通用库是很常见的:

(function(undefined) {
    // ...
})();

…这只是你提议的一个变体。作者为什么这么做?如果一些eejit在他们的代码之外这样做:

undefined = 42;

上面的模式确保作用域函数中的undefined标识符确实具有值undefined(因为我们在调用作用域函数时没有传递任何参数)。

这不是一种认可,只是强调这样做没有技术问题。

您不再看到这种模式了,因为第5版规范(2009年)使undefined全局变量(以及其他几个变量)只读。给它赋值停止改变它的值。参见附录E和第15.1.1节,其中引用了:

15.1.1:将全局对象的值属性NaN、Infinity和undefined修改为只读属性