我经常看到JavaScript代码以这种方式检查未定义的参数等:
if (typeof input !== "undefined") {
// do stuff
}
这似乎有点浪费,因为它涉及类型查找和字符串比较,更不用说它的冗长了。需要它是因为undefined可以重命名。
我的问题是:
这段代码比下面的方法好到哪里去了:
if (null != input) {
// do stuff
}
据我所知,你不能重定义null,所以它不会意外中断。并且,由于!=操作符的类型强制,这将检查undefined和null…这通常正是你想要的(例如,对于可选的函数参数)。
然而,这种形式似乎并不普遍,它甚至会导致JSLint因为您使用了邪恶的!=操作符而对您大喊大叫。
为什么这被认为是糟糕的风格?
如果声明了变量(使用var关键字,作为函数参数,或作为全局变量),我认为最好的方法是:
if (my_variable === undefined)
jQuery做到了,所以它对我来说足够好了:-)
否则,你必须使用typeof来避免ReferenceError。
如果你希望undefined被重新定义,你可以像这样包装你的代码:
(function(undefined){
// undefined is now what it's supposed to be
})();
或者通过void操作符获取:
const undefined = void 0;
// also safe
如果声明了变量(使用var关键字,作为函数参数,或作为全局变量),我认为最好的方法是:
if (my_variable === undefined)
jQuery做到了,所以它对我来说足够好了:-)
否则,你必须使用typeof来避免ReferenceError。
如果你希望undefined被重新定义,你可以像这样包装你的代码:
(function(undefined){
// undefined is now what it's supposed to be
})();
或者通过void操作符获取:
const undefined = void 0;
// also safe