"var undefined;"算好吗?

Is "var undefined;" considered as good?

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

例如:

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

UglifyJS 会给我:

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

编辑

谢谢@T.J。拥挤!现在我有了自己的选择。我确定 undefinedNaNInfinitywindow 不是保留字,它们只是 "read-only"。所以,声明一个本地 undefined 没有问题(即使是严格模式)。我也不担心混淆的维护问题,我只需要写一个 // comment/* comment */ 来解释那是什么意思。

是否 "good" 是见仁见智的事情,所以让我们把它放在一边。

正面:

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

否定:

  • 围绕它可能导致的混乱的维护问题。

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

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

...这只是您提议的变体。为什么作者要那样做?如果某些 eejit 在他们的代码之外这样做:

undefined = 42;

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

这不是背书,只是强调这样做没有技术问题。

您不再经常看到这种模式,因为第 5 版规范 (2009) 将 undefined 全局变量(以及其他几个)设为 readonly。分配给它停止改变它的价值。请参阅 Annex E 和第 15.1.1 节,它引用了:

15.1.1: The value properties NaN, Infinity, and undefined of the Global Object have been changed to be read-only properties.