我遇到了以下代码:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
我对JavaScript有点陌生,但是从我在这里阅读过的其他问题来看,我的印象是这段代码没有多大意义。
如果您在以外的任何上下文中访问未定义的变量,则会收到错误消息typeof
。
更新:上面的(引号)答案可能会引起误解。应该说“未声明的变量”,而不是“未定义的变量”。
正如我发现的那样,在Ryan♦,maerics和nwellnhof的答案中,即使没有为函数提供任何参数,也总是声明该参数的变量。这个事实也证明下面列表中的第一项是错误的。
据我了解,可能会遇到以下情况:
调用该函数时不带参数,因此产生data
一个未定义的变量,并在上引发错误data != null
。该函数专门以
null
(或undefined
)作为其参数来调用,在这种情况下,该函数data != null
已经保护了内部代码,因而变得&& data !== undefined
无用。该函数使用非null参数调用,在这种情况下,它将琐碎地传递
data != null
和data !== undefined
。
问:我的理解正确吗?
我在Firefox的控制台中尝试了以下操作:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
我无法弄清楚data !== undefined
之后 data != null
的用法可能有用。
if(data)
表示他无法通过false
或0
作为的值data
。
if(typeof someUndefVar == whatever) -- works
和if(someUnderVar) -- error
。
data !== null && data !== undefined
,它data != null
等效于data != undefined
。前一种形式倾向于优先使用,因为它对条件更为明确,而很容易忽略这两种形式null
,undefined
而后两种情况正在对其进行检查。
undefined
IMO的显式测试是一种代码异味。它不是像一样的受保护关键字null
,它是一个未定义的变量。这是完全有效的,并且会破坏您的代码:undefined = 1
if (data)
。这是一种助记符的Javascript方法,用于检查data
变量的评估结果是否为true。undefined
,,null
false,0,空字符串,空数组和(?)没有属性的对象的结果为false,其余为true。