我经常看到JavaScript代码以这种方式检查未定义的参数等:
if (typeof input !== "undefined") {
// do stuff
}
这似乎有点浪费,因为它涉及类型查找和字符串比较,更不用说它的冗长了。这是必需的,因为undefined
可以重命名。
我的问题是:该代码比这种方法有什么更好的方法:
if (null != input) {
// do stuff
}
据我所知,您无法重新定义null
,因此不会意外中断。并且,由于!=
运算符的类型强制,这会同时检查undefined
和null
...,这通常正是您想要的(例如,用于可选函数参数)。
然而,这种形式似乎并不普遍,它甚至导致JSLint对使用邪恶的!=
运算符大喊大叫。
为什么这被认为是不好的风格?
[typeof
更安全,因为它允许在以前从未声明过标识符:
if (input == undefined) { ... }
如果声明变量(使用var
关键字,作为函数参数或作为全局变量,则我认为最好的方法是:
好方法:
您不必担心未定义的重命名。如果某人重命名了undefined,那么如果检查失败,您将面临的麻烦将不止几个。如果您真的想保护您的代码,则将其包装在IFFE(立即调用的函数表达式)中,如下所示:
如果您真的担心未定义会被重新定义,则可以使用以下一些辅助方法来防止这种情况:
您还可以使用void运算符获取未定义的值:
在这种情况下,我实际上遇到过(typeof input !== 'undefined')
,在该情况下,它用于提供默认的函数参数: