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

问题描述 投票:467回答:11

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

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

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

我的问题是:该代码比这种方法有什么更好的方法:

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

据我所知,您无法重新定义null,因此不会意外中断。并且,由于!=运算符的类型强制,这会同时检查undefinednull ...,这通常正是您想要的(例如,用于可选函数参数)。

然而,这种形式似乎并不普遍,它甚至导致JSLint对使用邪恶的!=运算符大喊大叫。

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

javascript coding-style
11个回答
678
投票

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


0
投票


-7
投票
if (input == undefined) { ... }

48
投票

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


26
投票

好方法:


12
投票

您不必担心未定义的重命名。如果某人重命名了undefined,那么如果检查失败,您将面临的麻烦将不止几个。如果您真的想保护您的代码,则将其包装在IFFE(立即调用的函数表达式)中,如下所示:


6
投票

如果您真的担心未定义会被重新定义,则可以使用以下一些辅助方法来防止这种情况:


4
投票

您还可以使用void运算符获取未定义的值:


1
投票

在这种情况下,我实际上遇到过(typeof input !== 'undefined'),在该情况下,它用于提供默认的函数参数:


1
投票


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.