我遇到了以下代码:
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而后两种情况正在对其进行检查。
undefinedIMO的显式测试是一种代码异味。它不是像一样的受保护关键字null,它是一个未定义的变量。这是完全有效的,并且会破坏您的代码:undefined = 1



if (data)。这是一种助记符的Javascript方法,用于检查data变量的评估结果是否为true。undefined,,nullfalse,0,空字符串,空数组和(?)没有属性的对象的结果为false,其余为true。