从javascript函数返回undefined或null是否更好?
我有一个我写的函数,基本如下所示:
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”会更好吗?
我可以通过我想要的任何东西 - 显然......我只是不确定使用什么最好的东西。
调用这个函数的代码知道如何处理未定义的(它实际上不会真的发生,除非出现可怕的错误)
我问这个问题的原因是,我听到某处听起来像“不要将未定义的变量分配给”或其他地方 - 它会使调试更加困难。 所以,我可以看到null
传回的事实告诉我,返回正在工作 - 但基本功能类似于undefined
。
文档:
Mozilla文档没有回答我的问题...谷歌没有:
这个SO问题 - 对我在这里试图弄清楚的东西来说过于宽泛。
我会认为没有最好的办法,甚至标准功能有时会选择其中一种。
例如:
[[原型]]
普通对象有一个[[Prototype]]内部插槽,用于确定从哪个其他对象继承。 当然,必须有一种方法可以说一个对象不会从其他任何一个继承。 在这种情况下,“没有这样的对象”用null
表示。
Object.getOwnPropertyDescriptor
期望返回属性描述符,即描述属性的对象(例如值,可写性,可枚举性和可配置性)。 但是,该属性可能不存在。 在这种情况下,“没有这样的属性”用undefined
表示。
document.getElementById
预计将返回给定ID的元素。 但是,该ID可能没有元素。 在这种情况下,“没有这样的元素”用null
表示。
所以,只要选择你喜欢的或者认为对你的具体情况更有意义的东西。
未定义通常是指尚未分配值(还)的东西。 空指的是最终没有价值的东西。 在这种情况下,我会建议返回null。 请注意,没有指定返回值的函数隐式返回undefined。
来自ECMAScript2015规范
4.3.10未定义的值
当变量未被赋值时使用的原始值
4.3.12空值
表示故意不存在任何对象值的原始值
http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-undefined-type
进一步阅读:
什么时候在JavaScript中使用null或undefined?
我会给你我个人喜欢的两种选择方式。
我的一个简单问题是: 给定另一个输入/状态/上下文的值是否可以定义为某个值?
如果答案是肯定的,那么使用null
否则使用undefined
。 更一般地说,当目标对象不存在时,任何返回对象的函数都应该返回null
。 因为它可能存在另一个输入/状态/上下文。
null
表示给定的输入/状态/上下文缺少值 。 它隐含地意味着价值本身的概念存在于你的申请中,但可能缺席。 在你的例子中,下一张卡的概念存在,但卡本身可能不存在。 应该使用null
。
undefined
隐含地表示应用程序上下文中缺少该值的含义 。 例如,如果我使用一组给定的属性操作user
对象,并尝试访问属性pikatchu
。 此属性的值应该设置为undefined
因为在我的上下文中,拥有这样的属性没有任何意义。
上一篇: Is it better to return `undefined` or `null` from a javascript function?