变量未定义;"被认为是好的
Is "var undefined;" considered as good?
我认为undefined
(或window.undefined
)是一个常量变量,而不是一个保留字(像NaN
, Infinity
,不像null
)。当使用UglifyJS压缩一个经常使用undefined
的Javascript文件时,最好声明一个局部变量来保存undefined
。
function main() {
var undefined;
...
}
UglifyJS会给我:
function main(){var n;...}
编辑
谢谢@T.J。克劳德!现在我有自己的选择了。我确信undefined
, NaN
, Infinity
和window
不是保留字,它们只是"只读"。因此,声明一个本地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修改为只读属性
相关文章:
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 什么是"!函数(){}〃;javascript中的mean/do
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- 什么是==+"在javascript中
- 为什么使用“new”创建一个Javascript数组被认为是不好的
- 为什么流星会被认为是不安全的
- 这些被认为是Javascript闭包吗
- 美元符号可以被认为是jquery中的宏吗?
- 什么是“=*"AngularJS中
- 你能用“-"而不是“/"使用JavaScript短日期格式
- 我的javascript函数有问题,我认为是document.getElementById('vodObj
- 这个JS函数会被认为是递归的吗
- 什么是“@"ecmascript 6中的字符平均值
- “var self=this”被认为是一种代码气味
- 为什么数字垫被认为是字符
- jQuery.ajax认为是什么响应;成功”;
- 为什么这些字符被认为是大写的
- 什么被认为是在节点模块中共享“全局”变量的好方法
- JavaScript 认为是星期四和星期五
- 如果 JS 包装器对象被认为是糟糕的风格,那么使用 lodash _.isString 等进行类型检查是否也被认为是糟糕