JavaScript undefined检查

7

我经常看到 JavaScript 代码中,一个函数可能会接收一个“选项”对象,并像这样使用它:

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

这似乎相当于以下内容:

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

现在,我明白在某些情况下,您可能真的关心options.nameundefined还是null,这对我来说是有意义的,但我经常看到这种情况,而这种区别并不必要。

我相信我听说过人们编写这样的代码是因为IE中的某些错误。请有人详细说明一下吗?

2个回答

6

我不知道IE中的错误,但这些语句并不完全等价:

  • 第一条仅在options.nameundefined时将name变量设置为默认值"Bob"

  • 第二个语句无论何时options.name为假都会将name变量设置为"Bob"。这可能是一个空字符串、null值、0值、NaN值、布尔值false,还有undefined

例如,如果options.name === 0,第一条语句将把name变量设置为0,而第二条语句将把它设置为"Bob"


2
我希望这取决于开发人员的实际意图,而不是他们所订阅的任何约定。在很多情况下,较短的name = options.name || "Bob";可能会给你一些你不期望的值,如果你不知道它的实际行为,因为它会强制将一个布尔值从options.name中转换出来。在其他情况下,其他“假值”几乎是不可能的:例如,如果该值来自表单元素,则您不需要担心undefinednullfalse0——只要表单元素存在,它应该始终是一个字符串——所以这个检查将确保该字段不是空字符串(尽管任何空格都将通过)。另一个常见的模式类似于options.name || "Bob"的是if (options.name) {...},它具有相同的潜在问题/好处。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接