从javascript函数返回“undefined”还是“null”更好?

2022-08-30 04:12:24

我有一个我写的函数,基本上看起来像这样:

function getNextCard(searchTerms) {
  // Setup Some Variables

  // Do a bunch of logic to pick the next card based on termed passed through what I'll call here as 'searchTerms' all of this logic is omitted because it's not important for my question.
  // ...

  // If we find a next card to give, than give it
  if (nextCardFound)
    return nextCardFound;

  // Otherwise - I'm returning undefined
  return undefined;
}

问:在这里返回“null”会更好吗?

我可以把任何我想回来的东西都传回来 - 显然...我只是不确定什么是最好用的。

调用此函数的代码知道如何处理未定义的(除非出现可怕的错误,否则它实际上永远不会真正发生)

我问这个问题的原因是,我在某个地方听到了一些听起来像“不要为变量赋值未定义”之类的东西 - 这将使调试变得更加困难。因此,我可以看到被传回的事实告诉我返回正在工作 - 但基本上功能类似于。nullundefined


文档:

Mozilla Docs没有回答我的问题...谷歌也没有:\

这个SO问题 - 对于我在这里试图弄清楚的东西来说太宽泛了。


答案 1

未定义通常是指尚未分配值(尚未)的东西。Null 指的是明确没有价值的东西。在这种情况下,我建议返回空值。请注意,没有指定返回值的函数隐式返回未定义。

来自 ECMAScript2015 规范

4.3.10 未定义值

未为变量赋值时使用的基元值

4.3.12 空值

表示有意缺少任何对象值的基元值

http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-undefined-type

延伸阅读:

JavaScript 中何时使用 null 或 unfined?


答案 2

我会给你我个人固执己见的方式,在两者之间做出选择。

我的简单问题是:给定另一个输入/状态/上下文的值是否可以定义为某物?

如果答案是肯定的,则使用 else 使用 。更一般地说,当预期对象不存在时,任何返回对象的函数都应该返回。因为它可以在给定另一个输入/状态/上下文的情况下存在。nullundefinednull

null表示给定输入/状态/上下文缺少值。它隐式意味着值本身的概念存在于应用程序的上下文中,但可能不存在。在您的示例中,下一张卡的概念存在,但卡本身可能不存在。 应该使用。null

undefined隐式表示该值在应用程序的上下文中没有意义。例如,如果我使用给定的属性集操作一个对象,并且我尝试访问该属性。应将此属性的值设置为,因为在我的上下文中,具有这样的属性没有任何意义。userpikatchuundefined