找不到所需功能的函数的建议返回值是多少?

时间:2018-12-22 00:11:17

标签: javascript

如果我有旨在分别找到某个DOM节点或对象数组中某个对象的函数,或者包含零和正负两个值的整数列表中的数字,或者从数组中找到一个字符串的函数,字符串-在上述每种情况下,如果函数均未找到匹配项,我应该返回什么? undefinedfalse?是否有确定的方法?

4 个答案:

答案 0 :(得分:3)

对于不是数组的任何内容,我都选择falsenullundefined

但是对于数组,我将返回空数组[],以便能够与其他数组原型方法(过滤器,映射等)组成函数。

答案 1 :(得分:2)

根据情况,您可能需要返回-1或一个空数组。但通常您只返回null。

return null;

答案 2 :(得分:1)

您应该使用本地javascript方法作为示例。例如:

您的方法通常返回字符串吗?在这种情况下,像js方法一样返回""

let s = "123"
let sub =  s.substring(10)
console.log(typeof sub, sub)

它是否从序列中返回索引?那么-1可能是最好的结果,因此它与indexOf匹配。

搜索容器的函数,例如Array.find返回undefined,这可能是一个很好的模型。与null不同的是,它不会为typeof返回“对象”

返回false的唯一原因是该方法成功返回true。像Array.some()

getElementById()这样的DOM搜索在失败时返回null

很难想到一个示例,其中没有一个可以从本机javascript遵循的好的模型。这将使代码更容易理解,并使经过深思熟虑的猜测通常能够按预期进行。

答案 3 :(得分:1)

出于多种原因,我将对return null答案再投票。这有几个优点。

其中之一是JavaScript引擎可以通过假设您始终返回对象的相同 shape 来优化代码。返回null会保留此形状。

假设您始终返回通过给定参数找到的项目。因此,它是类型{ x: number }。 JIT编译器可以假定并直接在机器代码中(或接近机器代码)拥有您的代码版本,并说“它始终是{ x: number }”。但是,如果您现在有时在其中插入return false,则优化无效,因为该优化的内容为“此函数主要返回{ x: number },但有时返回布尔值时除外”。与undefined类似。

但是null也可以是{ x: number }的实例,它只是它的null实例。

第二个原因是,如今人们越来越多地使用打字系统-想想TypeScript和Flow。在这种类型的系统中,您的linter可能还会指出:“嘿,您总是返回{ x: number },但是在这里是布尔值,请停止该操作!”然后,您的IDE会在return false部分加上红色下划线,并且您必须将返回类型注释更改为<any>,这会破坏您的整个一天。

但是如果它为null,就不会抱怨。因此,我建议您为找不到的值返回null。

P.S。当然,除了返回数组的方法外,如果希望链接,请使用上面的示例所示的空数组。