我遇到了以下代码:
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
无用。函数被调用时具有非空的参数,在这种情况下,它将平凡地通过
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 != null
后面 data !== undefined
有任何用处的情况。
if (data)
。这是一种记忆化的 JavaScript 检查data
变量是否为真的方法。undefined
、null
、false、0、空字符串、空数组和没有属性的对象都会被视为 false,其余则视为 true。 - J0HNif(data)
,意味着他不能将false
或0
作为data
的值传递。 - techfoobardata !== null && data !== undefined
,它等同于data != null
也等同于data != undefined
。前者更明确地表达了这些条件,因此更受青睐,而后两种条件可能会忽略它们都在检查null
和undefined
。 - zzzzBovundefined = 1
。 - IzkataBoolean({})
和Boolean([])
都是 true。 - Jim Jones