Jer*_*art 68 javascript null return function undefined
我有一个我写的功能,基本上看起来像这样:
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;
}
Run Code Online (Sandbox Code Playgroud)
问题:在这里返回"null"会更好吗?
我可以通过我想要的任何东西 - 显然......我只是不确定什么是最好用的东西.
调用此函数的代码知道如何处理未定义的(除非出现可怕的错误,否则实际上不会真正发生)
我问这个问题的原因是我听到某些地方听起来像"不要将未定义的变量分配给变量"或其他东西 - 它会使调试变得更难.所以,我可以看到null传回来的事实告诉我返回工作 - 但基本上功能类似于undefined.
Mozilla Docs没有回答我的问题...谷歌也没有回答:
chi*_*NUT 90
未定义通常是指尚未分配值的东西(尚未).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?
Ori*_*iol 26
我认为没有最好的方法,甚至标准功能有时会选择其中一种.
例如:
[[原型]]
普通对象有一个[[Prototype]]内部槽,它决定了它们从哪个其他对象继承.当然,必须有一种方法可以说对象不会从任何其他对象继承.在这种情况下,使用表示"没有这样的对象" null.
Object.getOwnPropertyDescriptor
期望返回属性描述符,即描述属性的对象(例如,值,可写性,可枚举性和可配置性).但是,该财产可能不存在.在这种情况下,使用表示"没有这样的属性" undefined.
document.getElementById
期望返回具有给定ID的元素.但是,可能没有该ID的元素.在这种情况下,使用表示"没有这样的元素" null.
因此,只需选择您喜欢的任何内容,或者认为对您的具体情况更有意义.
ngr*_*man 23
我将以两种方式在两者之间进行选择.
我的简单问题是:给定另一个输入/状态/上下文的值是否可以定义为什么?
如果答案是肯定的,那么使用nullelse undefined.更一般地,null当目标对象不存在时,返回对象的任何函数都应该返回.因为它可以存在给定另一个输入/状态/上下文.
null表示给定输入/状态/上下文缺少值.它隐含地意味着价值的概念本身存在于您的应用程序的上下文中,但可能不存在.在您的示例中,存在下一张卡的概念,但卡本身可能不存在.null应该使用.
undefined隐含地表示在您的应用程序的上下文中缺少该值的含义.例如,如果我操作user具有给定属性集的对象,我尝试访问该属性pikatchu.应该将此属性的值设置为,undefined因为在我的上下文中,拥有这样的属性没有任何意义.
我认为在这种情况下,null应该退货。
如果您从理论计算机科学的角度考虑这个问题,那么undefined用于指示非终止/不可计算性(即部分函数x的未定义点的占位符,通常写为 ff(x) = \xe2\x8a\xa5)。
getNextCard然而似乎能够计算下一张卡(如果存在)并且也能够计算是否没有下一张卡。换句话说,该函数是完整的,因为它会针对每个输入而终止。
话虽这么说,需要一个特殊的值来表示没有有意义结果的终止(即“没有卡我可以返回此输入”),而这对我来说null不是undefined。
笔记:
\n\n您可以在其他一些类型语言中看到对此参数的一些支持,以及使用选项类型(有时也称为可为null 类型)表示没有有意义结果的终止。Haskell中的Maybe就是一个例子。
\n\n另一方面,我们当然不知道undefinedJavaScript 中的真正含义。因此,与未定义的类比有点站不住脚。此外,由于我们总是希望使用全部函数,这相当于说“永远不会undefined从函数返回”。这似乎有点严格,因为它会限制undefined对尚未设置的属性/变量的使用。
最后,我个人的偏好是永远不会返回undefined我可以返回的地方null,并且我还认为这是更好的编码约定(因为除其他外,x !== null它比 更短typeof x !== \'undefined\')。
| 归档时间: |
|
| 查看次数: |
49964 次 |
| 最近记录: |