typeof !== “undefined” vs. != null

2022-08-29 23:04:44

我经常看到JavaScript代码以这种方式检查未定义的参数等:

if (typeof input !== "undefined") {
    // do stuff
}

这似乎有点浪费,因为它涉及类型查找和字符串比较,更不用说它的详细程度了。这是必需的,因为可以重命名。undefined

我的问题是:
该代码如何比这种方法更好:

if (null != input) {
    // do stuff
}

据我所知,你不能重新定义,所以它不会意外中断。而且,由于运算符的类型强制,这会检查和...这通常正是您想要的(例如,对于可选的函数参数)。null!=undefinednull

然而,这种形式似乎并不普遍,它甚至导致JSLint对你大喊大叫,因为你使用了邪恶的操作员。!=

为什么这种风格被认为是不好的?


答案 1

typeof更安全,因为它允许标识符以前从未被声明过:

if(typeof neverDeclared === "undefined") // no errors

if(neverDeclared === null) // throws ReferenceError: neverDeclared is not defined

答案 2

如果声明变量(使用关键字,作为函数参数或全局变量),我认为最好的方法是:var

if (my_variable === undefined)

jQuery做到了,所以它对我来说已经足够好了:-)

否则,您必须使用 以避免 .typeofReferenceError

如果您希望重新定义未定义,则可以像这样包装代码:

(function(undefined){
    // undefined is now what it's supposed to be
})();

或通过运营商获取:void

const undefined = void 0;
// also safe