JavaScript未定义检查

时间:2010-09-01 23:53:45

标签: javascript internet-explorer undefined

我经常看到JavaScript代码,其中函数可以包含在“options”对象中并使用它:

var name = typeof options.name !== 'undefined' ? options.name : "Bob";

这似乎等同于以下内容:

var name = options.name || "Bob"; 

现在,我了解在某些情况下,你可能真的关心options.nameundefined vs null这对我有意义,但我经常在这种区别的情况下看到这一点没有必要。

我相信我听说人们因为IE中的一些错误而编写这样的代码。有人可以详细说明吗?

2 个答案:

答案 0 :(得分:6)

我不知道IE中的错误,但这些陈述并不完全等同:

  • 仅当name"Bob"时,第一个将options.name变量设置为默认undefined

  • 只要name是假的,第二个就会将"Bob"变量设置为options.name。这可以是空字符串,null值,值0NaN值,布尔值false以及undefined。< / p>

例如,如果options.name === 0,第一个语句会将name变量设置为0,而第二个语句会将其设置为"Bob"

答案 1 :(得分:2)

我希望它取决于开发者实际打算做什么,而不是他们订阅的任何约定。在很多情况下,较短的name = options.name || "Bob";最终会给你提供你不期望的值,如果你不知道它的实际行为,因为它会强制options.name之外的布尔值。在其他情况下,其他“虚假”值将是不可能的(或几乎不可能):例如,如果值来自表单元素,您实际上不必担心undefined,{{1} },nullfalse - 只要表单元素存在,它应该始终是一个字符串 - 所以这个检查将确保该字段不是一个空字符串(尽管任何字符串)白色空间将通过)。与0类似的另一种常见模式是options.name || "Bob",它具有相同的潜在问题/好处。