如果我有旨在分别找到某个DOM节点或对象数组中某个对象的函数,或者包含零和正负两个值的整数列表中的数字,或者从数组中找到一个字符串的函数,字符串-在上述每种情况下,如果函数均未找到匹配项,我应该返回什么? undefined
? false
?是否有确定的方法?
答案 0 :(得分:3)
对于不是数组的任何内容,我都选择false
或null
或undefined
。
但是对于数组,我将返回空数组[]
,以便能够与其他数组原型方法(过滤器,映射等)组成函数。
答案 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。当然,除了返回数组的方法外,如果希望链接,请使用上面的示例所示的空数组。